0

我正在尝试通过调用类读取受保护的变量。我受保护的 $test 和新的 ReflectionClass 的问题在哪里?

<?PHP
class foo
{
    protected $test = ['foo' => 'foo'];
    public function __construct()
    {
        $class = get_called_class();

        do
        {
            foreach((new \ReflectionClass($class))->getDefaultProperties() as $property => $value)
                var_dump([$class.'::'.$property => $value]);
        }
        while($class = get_parent_class($class));
    }
}

class baz extends foo
{
    protected $test = ['baz' => 'baz'];
}

new baz;

实际的:

  ["baz::test"]=>
    ["baz"]=> "baz"
  ["foo::test"]=>
    ["baz"]=> "baz"

预期的:

  ["baz::test"]=>
    ["baz"]=> "baz"
  ["foo::test"]=>
    ["foo"]=> "foo"

亲切的问候。

4

1 回答 1

0

没有问题。父类中的$test类变量设置为:

array
(
   'foo' => 'foo'
)

继承它的子类会覆盖数组的值(它不会添加到数组中,而是替换所有现有的键/值):

array
(
   'baz' => 'baz'
)
于 2013-01-17T23:11:14.003 回答