使用ReflectionClass的受保护的变量
问题描述:
我试图通过调用类读取受保护的变量。问题与我的受保护的$测试和新的ReflectionClass在哪里?使用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"
亲切的问候。
答
没有问题。在父类中的$test
类变量设置为:
array
(
'foo' => 'foo'
)
和承接其覆盖数组的值(它不添加到数组,但替换所有现有的键/值的子类)与:
array
(
'baz' => 'baz'
)
即使我创建ReflectionClass(字符串parentClassName)的新实例 - 不是由巴兹的实例吗? 我如何使用ReflectionClass检测父母? – fruffl
是的。如PHP手册中所定义的,继承意味着“扩展或派生类具有基类的所有变量和函数”。你在巴兹做的所有事情都是压倒一个变量。 – hohner
@fruffl你对这个问题感到满意还是你想更多地讨论它?如果没有,你可以标记这个答案为接受:) – hohner