Php pg_fetch_object()中缺少神秘的类值

Php pg_fetch_object()中缺少神秘的类值,php,postgresql,Php,Postgresql,我遇到了一个问题,当我传递一个自定义类时,pg_fetch_object()返回一个空对象 class foo { protected $_data = array(); public function __construct(array $data = array()) { $this->_data = array( 'foo_id' => null, 'parent_id' => null,

我遇到了一个问题,当我传递一个自定义类时,pg_fetch_object()返回一个空对象

class foo {
    protected $_data = array();

    public function __construct(array $data = array()) {
        $this->_data = array(
            'foo_id' => null,
            'parent_id'  => null,
            'type' => 'region',
            'name' => null,
            'description' => '',
        );

        foreach ($data as $key => $val) {
            $this->__set($key,$val);
        }
    }

    public function __set($key, $val) {
        echo "SETTING $key -> $val";
        var_dump($this->_data);
        $this->_data[$key] = $val;
    }

    public function __get($key) {
        return $this->_data[$key];
    }
}
那我就叫这个

 $tmp = pg_fetch_object($result, $current_row, "foo");
 var_dump($tmp);
我得到这个输出

SET foo_id => 55925
array(0) { }
SET name => All
array(1) { ["foo_id"]=> string(5) "55925" }
SET searchable => ALL
array(2) { ["foo_id"]=> string(5) "55925" ["name"]=> string(3) "All" }
SET parent_id =>
array(3) { ["foo_id"]=> string(5) "55925" ["name"]=> string(3) "All"                 ["searchable"]=> string(3) "ALL" }
SET type => region
array(4) { ["foo_id"]=> string(5) "55925" ["name"]=> string(3) "All"     ["searchable"]=> string(3) "ALL" ["parent_id"]=> NULL }
SET sub_count => 96
array(5) { ["foo_id"]=> string(5) "55925" ["name"]=> string(3) "All" ["searchable"]=> string(3) "ALL" ["parent_id"]=> NULL ["type"]=> string(6) "region" }
SET description =>
array(6) { ["foo_id"]=> string(5) "55925" ["name"]=> string(3) "All" ["searchable"]=> string(3) "ALL" ["parent_id"]=> NULL ["type"]=> string(6) "region"     ["sub_count"]=> string(2) "96" } asdfasdfasdfasdfasdf

object(Dao_Region)#23 (2) {
  ["_data":protected]=>
  array(5) {
    ["foo_id"]=>
    NULL
    ["parent_id"]=>
    NULL
    ["type"]=>
    string(6) "region"
    ["name"]=>
    NULL
    ["description"]=>
    string(0) ""
  }
}
为什么我的$tmp变量有所有初始值,即使我的setters被触发了


当我在pg_fetch_object()调用中将“foo”更改为StdClass时,它会工作。

pg_fetch_行实例化传递给它的类,并设置以数据库中的字段名命名的属性

例如,pg_fetch_row的作用类似于:

$record = pg_fetch_assoc()
$class = new $passedClassName();
foreach($record as $field => $val) $class->$field = $val;
return $class;
它不会将其值的数组传递给构造函数,正如您在上面的示例中编写的那样

因此,pg_fetch_row将正常实例化foo类,不向其构造函数传递任何参数,您的代码允许这样做,并将$data参数默认为空数组,设置默认值,然后退出


我们在日志中看到的对_集的调用在我伪造的示例中的foreach循环中触发。那里发生了一些奇怪的事情;这些值应该在数组中。尝试删除构造函数,看看是否能解决问题……

pg\u fetch\u行实例化传递给它的类,并设置以数据库中的字段名命名的属性

例如,pg_fetch_row的作用类似于:

$record = pg_fetch_assoc()
$class = new $passedClassName();
foreach($record as $field => $val) $class->$field = $val;
return $class;
它不会将其值的数组传递给构造函数,正如您在上面的示例中编写的那样

因此,pg_fetch_row将正常实例化foo类,不向其构造函数传递任何参数,您的代码允许这样做,并将$data参数默认为空数组,设置默认值,然后退出

我们在日志中看到的对_集的调用在我伪造的示例中的foreach循环中触发。那里发生了一些奇怪的事情;这些值应该在数组中。尝试删除构造函数,看看是否可以解决问题