Вы можете передать переменную в функцию по ссылке, и функция сможет
модифицировать свои аргументы. Синтаксис таков:
function foo (&$var)
{
$var++;
}
$a=5;
foo ($a);
// $a здесь равно 6
Заметьте, что в функции отсутствует знак ссылки - он есть только в
определении функции. Одного определения функции достаточно для корректной передачи аргументов по ссылке.
По ссылке можно передавать:
переменные, например, foo($a)
оператор new, например, foo(new foobar())
ссылку, возвращённую из функции, например:
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
Любое другое выражение не должно передаваться по ссылке, так как результат не определён/undefined. Например, следующий передача по ссылке является неправильной:
function bar() // отсутствует &
{
$a = 5;
return $a;
}
foo(bar());
foo($a = 5) // выражение, не переменная
foo(5) // константа, не переменная