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. A partir de PHP 5.3.0, se obtendrá una advertencia diciendo que "call-time pass-by-reference" (pasar por referencia en tiempo de llamada) está obsoleto cuando se use & en foo(&$a);. A partir de PHP 5.4.0, el paso por referencia en tiempo de llamada ha sido eliminado, por lo que su uso emitirá un error fatal.
Se puede pasar por referencia lo siguiente:
Referencias devueltas desde funciones, esto es:
<?php
function foo(&$var)
{
$var++;
}
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
?>
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 un error fatal a partir de PHP 5.0.5,un aviso de estándar estricto
// a partir de PHP 5.1.1, y un aviso a partir de PHP 7.0.0
foo($a = 5); // Expresión, no una variable
foo(5); // Produce un error fatal
class Foobar
{
}
foo(new Foobar()) // Produce un aviso a partir de PHP 7.0.7
// Observación: Solo las variables deben pasarse por referencia
?>