Php, я не могу получить доступ к унаследованным частным переменным даже не с отражением

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». Многие статьи говорят, что отражение – это решение

Вы передаете 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()); 

демонстрация

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

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