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