Переменную по ссылке разрешается передавать в функцию, чтобы функция изменила переменную. Синтаксис выглядит вот так:
<?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)
{
return $var++;
}
// Обратите внимание, перед названием функции отсутствует знак &
function bar()
{
$a = 5;
return $a;
}
foo(bar()); // Выдаёт предупреждение
foo($a = 5); // Выражение, а не переменная
foo(5); // Константа, а не переменная
class Foobar {}
foo(new Foobar()); // Вызывает уведомление с PHP 7.0.7
// Notice: Only variables should be passed by reference
?>