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 に答える