php get_object_vars()无法访问子对象中的私有属性

时间:2015-07-08 15:31:38

标签: php oop

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()的情况下使其工作?

1 个答案:

答案 0 :(得分:2)

从手册中引用:

  

根据范围获取给定对象可访问非静态属性。

(我的重点)

如果您确实需要访问父类中的私有变量,则需要使用reflection

修改

编辑的替代方法是覆盖子类中的toArray(),并通过它调用父级toArray()。

Demo