0
我試圖通過調用類讀取受保護的變量。問題與我的受保護的$測試和新的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"
親切的問候。
即使我創建ReflectionClass(字符串parentClassName)的新實例 - 不是由巴茲的實例嗎? 我如何使用ReflectionClass檢測父母? – fruffl
是的。如PHP手冊中所定義的,繼承意味着「擴展或派生類具有基類的所有變量和函數」。你在巴茲做的所有事情都是壓倒一個變量。 – hohner
@fruffl你對這個問題感到滿意還是你想更多地討論它?如果沒有,你可以標記這個答案爲接受:) – hohner