Forum und email

Passagem por referência

Você pode passar variáveis para funções por referência, então a função poderá modificar seus argumentos. A sintaxe é a seguinte:

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

$a=5;
foo ($a);
// $a é 6 aqui
?>
Note que não há o sinal de referência na chamada da função, somente na definição da função. A marcação na definição da função sozinha é suficiente para configurar corretamente a passagem de argumentos por referência. Em versões recentes do PHP você irá ter um aviso dizendo "Call-time pass-by-reference" é obsoleto quando usa um & em foo(&$a);.

As coisas a seguir podem ser passadas por referência:

  • Variáveis. Exemplo: foo($a)
  • Instrução new. Exemplo foo(new foobar())
  • Outra referência, retornada de uma função. Exemplo:

    <?php
    function &bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>
    Veja explicações sobre isso em retorno por referência.

Nenhuma outra expressão poderá ser passada por referência, com resultados indefinidos. Por exemplo, o exemplo seguinte de passagem por referência é inválido:

<?php
function bar() // Note a falta do &
{
    
$a 5;
    return 
$a;
}
foo(bar());

foo($a 5); // Expressão, não é variável
foo(5);      // Constante, não é variável
?>
Essas limitações valem para o PHP 4.0.4 em diante.