如何通过运行时的反射获取受保护属性对象的属性值?

时间:2015-08-14 13:37:39

标签: php

我在运行时创建了一个对象。它有一个受保护的属性,它也是在运行时创建的对象。这个属性对象有一个受保护的属性,字符串类型,我需要获取它的值。

<?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'?

有关反思的文档相当稀疏,任何人都可以帮助我吗?

1 个答案:

答案 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);

有点棘手的方式,甚至不确定是否需要,但它现在有效。