リファレンスにより関数に変数を渡すことが可能です。この場合、関数内で その引数を修正可能になります。構文は次のようになります。
<?php function foo(&$var) { $var++; } $a=5; foo($a); // $a はここでは 6 です ?>
注意: 関数コールの際には、リファレンス記号がないことに注意してください。 関数定義にのみリファレンス記号があります。リファレンスで正しく引数を 渡すには、関数定義のみで十分です。
次のものはリファレンスで渡すことが可能です。
foo($a)
関数から返されるリファレンスは、次のようになります。
<?php function foo(&$var) { $var++; } function &bar() { $a = 5; return $a; } foo(bar()); ?>
他の式は、結果が未定義となるため、リファレンスで渡すべきではありません。 例えば、リファレンスで渡す次の例は、無効です。
<?php function foo(&$var) { $var++; } function bar() // & がないことに注意 { $a = 5; return $a; } foo(bar()); // notice が発生 foo($a = 5); // 式、変数ではない foo(5); // 致命的なエラーが発生する class Foobar {} foo(new Foobar()) // PHP 7.0.7 以降は E_NOTICE が発生 // Notice: Only variables should be passed by reference ?>