前回
リフレクション その2 引数つきのprivateメソッドを実行する - by shigemk2
リフレクションネタでいいかげんしつこいかもしれません。
参照渡しのメソッドって、どのように実行したらよいのでしょう。
一応、前回と同じような感じで実行してみる。
<?php class Hoge { // 参照渡しの関数になっています。 private function aaa(&$a) { $b = '書いたな'; $a = $b . $a; } } $method = new ReflectionMethod('Hoge', 'aaa'); $method->setAccessible(true); // 実行する $a = 'コイツ'; $method->invoke(new Hoge, $a); print_r($a);
すると、こうなる。
PHP Warning: Parameter 1 to Hoge::aaa() expected to be a reference, value given
で、参照渡しのメソッドを実行するときは、invokeに&をつければよい。
<?php class Hoge { private function aaa(&$a) { $b = '書いたな'; $a = $b . $a; } } $method = new ReflectionMethod('Hoge', 'aaa'); $method->setAccessible(true); // 実行する $a = 'コイツ'; print_r($a); // コイツ // このようにしたらよい $method->invoke(new Hoge, &$a); print_r($a); // 書いたなコイツ