2017-02-13 8 views
0
class A 
{ 
    private $a; 
} 

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

(new B()); 

Это должно работать, даже если оно вызывает исключение: «property a doesnt exists». Многие статьи говорят, что Reflection - это решение.Php, я не могу получить доступ к унаследованным частным переменным даже не с отражением

+1

Чтение [Примечания в документации PHP] (http://www.php.net/manual/en/reflectionclass.getproperty.php) должно помочь, в частности, что отправил dohpaz42 –

ответ

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

Я не могу доступ наследственные приватные переменные даже не с отражением

Частные свойства и методы принадлежат к классу они были объявлены.
Они не доступны из производного класса, если вы не переопределяете их