Pasar por Referencia

Se puede pasar una variable por referencia a una función y así hacer que la función pueda modificar la variable. La sintaxis es la siguiente:

<?php

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

$a=5;

foo($a);
// $a es 6 aquí

?>

Nota: No existe ningún signo de referencia en una llamada a una función - sólo en la definición de la función. Las definiciones de funciones por sí solas son suficientes para pasar correctamente el argumento por referencia.

Se puede pasar por referencia lo siguiente:

  • Variables, esto es, foo($a)
  • Referencias devueltas desde funciones, es decir:

    <?php

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

    function &
    bar()
    {
    $a = 5;
    return
    $a;
    }

    foo(bar());

    ?>
    Vea más sobre devolver por referencia.

Ninguna otra expresión debería pasarse por referencia, ya que el resultado no está definido. Por ejemplo, los siguientes ejemplos de pasar por referencia no son válidos:

<?php

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

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

foo(bar()); // Produce una notificación

foo($a = 5); // Expresión, no una variable
foo(5); // Produce un error fatal

class Foobar
{
}

foo(new Foobar()) // Produce una notificación a partir de PHP 7.0.7
// Observación: Solo las variables deben pasarse por referencia
?>