扩展 ArrayObject:为什么 get_object_vars return 是一个空数组?
Extending ArrayObject: Why does get_object_vars return an empty array?
给定以下 class,为什么 get_object_vars
return 是一个空数组?这仅在我扩展 PHP 的 ArrayObject
时发生,但在文档中我无法找出此行为的原因。
class Test extends ArrayObject
{
public $foo;
public $bar;
public function setFooBarValues( array $values )
{
$this->foo = !empty( $values['foo'] ) ? $values['foo'] : null;
$this->bar = !empty( $values['bar'] ) ? $values['bar'] : null;
}
public function getArrayCopy()
{
return get_object_vars( $this );
}
}
运行 下面首先设置对象值的代码表明 get_object_vars
没有 return 对象的属性。
$object = new Test( array( 'lemon' => 1, 'orange' => 2, 'banana' => 3, 'apple' => 4 ) );
$object->setFooBarValues( array( 'foo' => 'x', 'bar' => 'y' ) );
var_dump( $object->getArrayCopy() );
预期结果:
array(2) {
["foo"]=>
string(1) "x"
["bar"]=>
string(1) "y"
}
实际结果:
array(0) {
}
虽然在manual the object seems to handle all its properties internally. Take a look at the constructor's second parameter int $flags = 0
and the two flags provided in the manual中没有说明原因:
ArrayObject::STD_PROP_LIST
当作为列表(var_dump、foreach 等)访问时,对象的属性具有正常功能。
ArrayObject::ARRAY_AS_PROPS
条目可以作为属性访问(读和写)。
常量 STD_PROP_LIST
是您要用于标准 属性 访问的内容。为构造函数提供此常量将为您提供所需的结果:
$object = new Test(
array( 'lemon' => 1, 'orange' => 2, 'banana' => 3, 'apple' => 4 ),
ArrayObject::STD_PROP_LIST
);
$object->setValues( array( 'foo' => 'x', 'bar' => 'y' ) );
var_dump( $object->getArrayCopy() );
结果:
array(2) {
["foo"]=>
string(1) "x"
["bar"]=>
string(1) "y"
}
给定以下 class,为什么 get_object_vars
return 是一个空数组?这仅在我扩展 PHP 的 ArrayObject
时发生,但在文档中我无法找出此行为的原因。
class Test extends ArrayObject
{
public $foo;
public $bar;
public function setFooBarValues( array $values )
{
$this->foo = !empty( $values['foo'] ) ? $values['foo'] : null;
$this->bar = !empty( $values['bar'] ) ? $values['bar'] : null;
}
public function getArrayCopy()
{
return get_object_vars( $this );
}
}
运行 下面首先设置对象值的代码表明 get_object_vars
没有 return 对象的属性。
$object = new Test( array( 'lemon' => 1, 'orange' => 2, 'banana' => 3, 'apple' => 4 ) );
$object->setFooBarValues( array( 'foo' => 'x', 'bar' => 'y' ) );
var_dump( $object->getArrayCopy() );
预期结果:
array(2) {
["foo"]=>
string(1) "x"
["bar"]=>
string(1) "y"
}
实际结果:
array(0) {
}
虽然在manual the object seems to handle all its properties internally. Take a look at the constructor's second parameter int $flags = 0
and the two flags provided in the manual中没有说明原因:
ArrayObject::STD_PROP_LIST 当作为列表(var_dump、foreach 等)访问时,对象的属性具有正常功能。
ArrayObject::ARRAY_AS_PROPS 条目可以作为属性访问(读和写)。
常量 STD_PROP_LIST
是您要用于标准 属性 访问的内容。为构造函数提供此常量将为您提供所需的结果:
$object = new Test(
array( 'lemon' => 1, 'orange' => 2, 'banana' => 3, 'apple' => 4 ),
ArrayObject::STD_PROP_LIST
);
$object->setValues( array( 'foo' => 'x', 'bar' => 'y' ) );
var_dump( $object->getArrayCopy() );
结果:
array(2) {
["foo"]=>
string(1) "x"
["bar"]=>
string(1) "y"
}