call_user_func()による関数呼び出しでは引数を参照で渡すことができません。(正確に言うと「できはしますが、エラーが発生するため推奨されません」)
<?php
function testRef(&$a) {
$a = 1;
}
testRef($b);
//$b === 1になる
call_user_func('testRef', $c); //エラー発生
call_user_func('testRef', &$c); //deprecatedな書き方
しかし、call_user_func_array()を使うと参照渡しが可能です。配列に参照として変数を組み込んでおけば良いです。
<?php
function testRef(&$a) {
$a = 1;
}
call_user_func_array('testRef', array(&$c)); //エラーが起きない
//$c === 1になる
裏ワザちっく。そのうち潰される書き方なのかな?