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

<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a is 6 here
?>

Примечание . На вызове функции нет ссылочного знака — только на определениях функций. Одних только определений функций достаточно, чтобы правильно передать аргумент по ссылке.

Следующие вещи могут быть переданы по ссылке:

  • Переменные, т.е.foo($a)

Ссылки, возвращаемые из функций, т.е.:

<?php
function foo(&$var)
{
    $var++;
}
function &bar()
{
    $a = 5;
    return $a;
}
foo(bar());
?>

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

<?php
function foo(&$var)
{
    $var++;
}
function bar() // Note the missing &
{
    $a = 5;
    return $a;
}
foo(bar()); // Produces a notice

foo($a = 5); // Expression, not variable
foo(5); // Produces fatal error

class Foobar
{
}

foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>