Passagem por referência

Uma variável pode ser passada por referência a uma função de forma que a função possa modificar a variável. A sintaxe é a seguinte:

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

$a = 5;
foo($a);
print $a; // $a é 6 aqui

Nota: Não há o sinal de referência na chamada da função - apenas nas definições de função. As definições de função, sozinhas, são suficientes para passar o argumento por referência.

Os itens seguintes podem ser passados por referência:

  • Variáveis, como foo($a)
  • Referências retornadas de funções, como:

    <?php
    
    function foo(&$var)
    {
        $var++;
        print $var;
    }
    
    function &bar()
    {
        $a = 5;
        return $a;
    }
    
    foo(bar());
    Veja mais sobre isso em retorno por referência.

Nenhuma outra expressão pode ser passada por referência pois não tem comportamento definido. Os seguintes exemplos de passagem por referência são inválidos:

<?php

function foo(&$var)
{
    $var++;
}

function bar() // Repare que falta &
{
    $a = 5;
    return $a;
}

foo(bar()); // Gera um aviso

foo($a = 5); // Expressão, não uma variável
foo(5); // Gera um erro fatal

class Foobar {}

foo(new Foobar()) // Produz um aviso no PHP 7.0.7
                  // Somente variáveis devem ser passadas por referência