Pasar variables por referencia en PHP

¿Qué es eso de pasar variables por referencia en PHP?

Hace un tiempo escribí un artículo en el que explicaba qué son las referencias en PHP. Si no lo has leído aún deberías echarle un vistazo primero.

Resumiendo: eso de referencias es como usar un «alias» para una variable.

¿Qué sucede cuando una función recibe un parámetro como una referencia?

Como he dicho, una referencia es un «alias». Así que cuando una función trata un parámetro como una referencia lo que hace es modificar la variable original.

¿Cómo pasar una variable por referencia?

NOTA: Estrictamente hablando, no se pasa una variable por referencia, se recibe una variable por referencia. Hay gente a la que este pequeño detalle no le importa un pimiento, pero por si acaso eres de esas personas puntillosas ahí lo dejo.

Para hacer que una función trate a sus parámetros como referencias basta con añadir el símbolo ‘&’ delante del nombre del parámetro.

Como lo mejor es verlo con un ejemplo allá va:

function mayusculas(&$valor)
{
    $valor = strtoupper($valor);
}

$nombre = 'Gorka';

mayusculas($nombre);

echo $nombre;

El resultado de esta función es ‘GORKA’, porque al tratar el parámetro como una referencia lo que hacemos es modificar la variable original $nombre.

Es decir, que si tratamos a un parámetro como referencia, los cambios que hagamos a ese parámetro afectarán al valor original. No tiene mucho más misterio.

Por cierto, ¿sabes cómo evitar problemas con las mayúsculas y minúsculas en PHP?

Ejemplo de funciones que usan referencias

Un ejemplo de una función que se usa bastante en PHP es: asort; esta función ordena un array modificando el array que le pasamos como parámetros.

¿Puedo pasar una cadena literal o una constante como referencia?

No, no puedes. Si lo haces verás un mensaje similar a éste:

PHP Fatal error: Only variables can be passed by reference

Por si no ha quedado claro, esto no funciona:

function mayusculas(&$nombre)
{
    $nombre = strtoupper($nombre);
}

mayusculas('Gorka'); // Maaaaal

echo $nombre;

¿Es bueno usar variables por referencia en PHP?

Seguro que piensas ¡Esto es genial! ¡Voy a usarlo en todas mis funciones a partir de ahora!

Bueno, no tan rápido, tiene algunas desventajas. Una de las principales desventajas es que eso de modificar la variable original es un comportamiento no habitual y puede dar lugar a confusiones.

También da algunos problemas de rendimiento pero eso lo dejo para otro día.

Deja un comentario