class A
{
private $a;
}
class B extends A
{
function __construct()
{
(new \ReflectionClass($this))->getProperty('a')->setAccessible(true);
echo $this->a;
}
}
(new B());
这应该可行,尽管它会触发异常:“属性不存在”。许多文章称反射是溶剂
答案 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());
答案 1 :(得分:1)
我无法访问继承的私有变量,甚至不能使用反射
私有属性和方法属于它们被声明的类。
除非您覆盖它们,否则无法从派生类访问它们