Передача по ссылке

Вы можете передать переменную в функцию по ссылке, чтобы она могла изменять значение аргумента. Синтаксис выглядит следующим образом:

<?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
?>