Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

PHP5.2.0のReflectionProperty


本家のphp-devネタですが、PHP5.2.0では非publicなメンバーの値がReflectionProperty#getValue()で取得できなくなっちゃってますね。。。

<?php
    class MyClass {
      protected $foo = 'bar';
    }
    
    $myobj = new MyClass();
    $c = new ReflectionClass($myobj);
    $p = $c->getProperty('foo');  // ReflectionPropertyオブジェクトが返る
    echo $p->getValue($myobj); // 「bar」が表示されるはず
?>

PHP5.1.6では「bar」が出力されますが、PHP5.2.0では

ReflectionException: Cannot access non-public member MyClass::foo ...

となります(CentOS4.4+PHP5.2.0で確認)。リフレクションをガシガシ使っている方は注意が必要です。