class test
{
private $foo;
protected $bar;
public function toarray()
{
return get_object_var($this);
}
class inheritedTest extends test
{
private $baz;
protected $baf;
}
$test=new Test();
test->toarray(); //does acccess private, protected
$itest= new inhertiedTest();
$itest->toArray(); // does access protected but not private
如果我覆盖toArray()
并致电父toArray()
,则可以正常工作。似乎get_object_var()
适用于声明上下文。在这种情况下,Test
属性是可见的。怎么了?如何在不覆盖toArray()
的情况下使其工作?
答案 0 :(得分:2)
从手册中引用:
根据范围获取给定对象的可访问非静态属性。
(我的重点)
如果您确实需要访问父类中的私有变量,则需要使用reflection
修改强>
编辑的替代方法是覆盖子类中的toArray(),并通过它调用父级toArray()。