Paso por valor y paso por referencia con PHP

Si el otro día hablábamos de la facilidad de usar índices negativos en arrays a través PHP, hoy traemos otra receta para cocinar el paso por valor y el paso por referencia, algo que en algunos lenguajes, como C, es de vital importancia, y que en el caso de PHP nos puede servir de gran ayuda.

Para ilustrar claramente la diferencia entre paso por valor y paso por referencia en una función en PHP, vamos a usar un pequeño script. Prestemos especial atención a las llamadas sumarPorValor() y sumarPorReferencia(), que de entrada vemos como la definición de ambas es similar.

<?php

// Declaramos las funciones

function sumarPorValor($suma, $a, $b) {
  $suma = $a + $b
}

function sumarPorReferencia(&$suma, $a, $b) {
  $suma = $a + $b
}

// Realizamos las llamadas

$a = 3;
$b = 2;
$suma = 0;
echo $suma . "\n";

sumarPorValor($suma, $a, $b); 
echo $suma . "\n";

sumarPorReferencia($suma, $a, $b);
echo $suma . "\n";

Y la salida que obtenemos:

0
0
5

Está claro, ¿no? Lo único que debemos de hacer es usar et (Ampersand) en la declaración de la función sobre la variable que deseamos que trabaje por referencia. En C, por ejemplo, hemos de modificar también la llamada, ya que lo trabajamos con direcciones de memoria y apuntadores sobre la función.

Espero que os haya sido de ayuda.