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

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

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