Paso por referencia

Se puede pasar una variable por referencia a una función, de manera que esta pueda modificarla. La sintaxis es la siguiente:

<?php

function foo(&$var) {
$var++;
}
$a=5;

foo ($a);
// $a vale 6 ahora

?>

Nota: No hay signo de referencia en la llamada de la función, solo en su definición. La definición de la función en sí misma es suficiente para pasar correctamente argumentos por referencia.

Los siguientes datos pueden ser pasados por referencia:

  • Una variable, como en foo($a)
  • Una referencia devuelta por una función:

    <?php

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

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

    foo(bar());

    ?>
    Para más información, ver los detalles en retorno por referencia.

Todas las otras expresiones no deben ser pasadas por referencia, ya que el resultado será indefinido. Por ejemplo, los siguientes pasos por referencia son inválidos:

<?php

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

function
bar() // Note la ausencia de &
{
$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 desde PHP 7.0.7
// Notificación: Solo las variables deben ser pasadas por referencia.
?>