nulil

PHP5.4で、呼び出し時の参照渡しがサポートされなくなるってのを知って、参照渡し結構使ってる…呼び出し時の参照渡し?…と思い試してみた。

function foo(&$value){
	$value = "FOO";
}
function bar($value){
  $value = "BAR";
}

$baz1 = "baz";
foo($baz1);
echo "baz1: ", $baz1, PHP_EOL;

$baz2 = "baz";
foo(&$baz2);
echo "baz2: ", $baz2, PHP_EOL;

$baz3 = "baz";
call_user_func_array("foo", array($baz3));
echo "baz3: ", $baz3, PHP_EOL;

$baz4 = "baz";
call_user_func_array("foo", array(&$baz4));
echo "baz4: ", $baz4, PHP_EOL;

$baz5 = "baz";
bar(&$baz5);
echo "baz5: ", $baz5, PHP_EOL;

$baz6 = "baz";
call_user_func_array("bar", array(&$baz6));
echo "baz6: ", $baz6, PHP_EOL;

PHP5.3での実行結果
baz3がエラーになるのは知らなかった…

baz1: FOO
baz2: FOO
PHP Warning:  Parameter 1 to foo() expected to be a reference, value given in Command line code on line 17
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. call_user_func_array() Command line code:17
baz3: baz
baz4: FOO
baz5: BAR
baz6: BAR

PHP5.4での実行結果(13,25行目はFatalエラーになるのでコメントアウトして実行してます)

PHP Fatal error: Call-time pass-by-reference has been removed in Command line code on line 13 PHP Fatal error: Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of bar(). in Command line code on line 25

baz1: FOO
baz2: baz
PHP Warning:  Parameter 1 to foo() expected to be a reference, value given in Command line code on line 17
baz3: baz
baz4: FOO
baz5: baz
baz6: baz

baz3がエラーになるのは同じ。
参照渡し引数で定義してある関数(foo)は問題なく使えるようなので、私としては特に問題はなさそうでした。