Home » PHP » Variables por referencia en PHP (&)

Variables por referencia en PHP (&)

En los casos de variables que hemos visto hasta ahora cada una de las variables tiene un valor propio y único. Es el caso normal, cada variable tiene asignado un espacio de memoria y allí almacena el valor. Pero también podemos asignar una variable por referencia a otra variable ya existente. En este caso, la segunda variable no mantiene una copia del valor sino la dirección de la variable a la que hace referencia. 

En este ejemplo se define una variable $Cadena y después se define una variable $Ref que contiene la dirección de la variable $Cadena. El signo & (ámpersan) adelante del nombre de la variable indica que se está almacenando la dirección y no el contenido. Si posteriormente se modifica el contenido de la variable $Cadena, automáticamente ese cambio se verá reflejado en la variable $Ref.

 
<?php
// Referencias (ejemplo file003.php)

$Cadena = "Tipo de dato de cadena";
$Ref = &$Cadena; // en $Ref se guarda la dirección de $Cadena
$Cadena = "--Aquí la cambio-- ";
echo $Ref;      // veremos "--Aquí la cambio-- "

?>
El almacenamiento del contenido de una variable es lo mismo a tener una copia de la variable de origen. En cambio, en el almacenamiento de la dirección, la nueva variable sólo tiene el dato que permite encontrar a la variable original.  
 

Pero, la variable de origen puede no tener contenido de datos, podría contener una referencia. La referencia es transitiva. Es decir, si queremos crear una segunda variable $Ref2 haciendo referencia a la variable $Ref (que por su parte tiene la referencia a $Cadena) lograremos visualizar el contenido de $Cadena utilizando $Ref2. 

<?php
// Referencias (ejemplo file004.php)

$Cadena = "Ejemplo";
$Ref = &$Cadena;  // en $Ref se guarda la dirección de $Cadena
$Ref2 = &$Ref;    // Referencia de referencia
echo $Ref2;       //  podremos ver "Ejemplo"

?>
En definitiva, el uso de las variables por referencia es similar a utilizar un alias para un nombre de variable. Es decir, son dos nombres de variables que apuntan a una misma dirección de memoria.
izq sup der

Deja un comentario