Reflectionに対してcall_user_func_arrayは使えない??
ReflectionFunctionを併用して関数の遅延評価をテストしていたのですが、思わぬ挙動に・・・
ReflectionFunctionの基本動作の確認
<?php $test = new ReflectionFunction('preg_match'); var_dump( $test->invoke('/php/i', 'PHP is the web scripting language of choice.') ); //int(1)
関数を動的に与えるのはちょっとキモイですが、引数を部分的に束縛して実行するには、Reflectionを使うのが便利そうです。
call_user_func_arrayとの相性?
ところが、下記のようにするとエラーになりました。
<?php $ref = new ReflectionFunction('preg_match'); $arg = array('/php/i', 'PHP is the web scripting language of choice.'); $res = call_user_func_array(array($ref, 'invoke'), $arg); var_dump($res);
Fatal error: Non-static method ReflectionFunction::preg_match() cannot be called statically
そこ、スタティックで呼んでるつもりないんですけど・・・invokeの先の動作がおかしい気がする。
そういうものなんでしょうか。
PHPのバグのような気がしますが、調べている時間がないので、とりあえずメモしておきます。