Php,我无法访问继承的私有变量,甚至没有反射

时间:2017-02-13 21:33:09

标签: php reflection

class A
{
    private $a;
}

class B extends A
{
    function __construct()
    {
        (new \ReflectionClass($this))->getProperty('a')->setAccessible(true);
        echo $this->a;
    }
}

(new B());

这应该可行,尽管它会触发异常:“属性不存在”。许多文章称反射是溶剂

2 个答案:

答案 0 :(得分:2)

您正在通过ReflectionClass B的实例,该实例无法访问$a。您需要的是将A的实例传递给它。这应该有助于澄清你需要做什么

class A
{
    private $a = 'Bob';
}

class B extends A
{
    function __construct()
    {
        $instance = new A();
        $reflection = new \ReflectionClass($instance);
        $property = $reflection->getProperty('a');
        $property->setAccessible(true);
        echo $property->getValue(new A());
    }
}

(new B());

Demo

答案 1 :(得分:1)

  

我无法访问继承的私有变量,甚至不能使用反射

私有属性和方法属于它们被声明的类。
除非您覆盖它们,否则无法从派生类访问它们