我在运行时创建了一个对象。它有一个受保护的属性,它也是在运行时创建的对象。这个属性对象有一个受保护的属性,字符串类型,我需要获取它的值。
<?php
class A
{
// will be set at runtime
protected $s = 'hello';
}
class B
{
// will be set at runtime
protected $a;
public function setA(A $a)
{
$this->a = $a;
}
}
// for example, somewhere in the library
$a = new A();
$b = new B();
$b->setA($a);
// I have $b returned from some library method call
$r = new ReflectionObject($b);
// How to get 'hello'?
有关反思的文档相当稀疏,任何人都可以帮助我吗?
答案 0 :(得分:3)
// for example
$a = new A();
$b = new B();
$b->setA($a);
$r = new ReflectionClass($b);
$property = $r->getProperty("a");
$property->setAccessible(true);
$a = $property->getValue($b);
$r = new ReflectionClass($a);
$property = $r->getProperty("s");
$property->setAccessible(true);
$s = $property->getValue($a);
有点棘手的方式,甚至不确定是否需要,但它现在有效。