get_object_vars
次のクラスが与えられた場合、空の配列が返されるのはなぜですか? これは、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
、オブジェクトのプロパティが返されないことがわかります。
$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) {
}