Referencias en PHP

Iniciado por madpitbull_99, 4 Junio 2011, 00:01 AM

0 Miembros y 1 Visitante están viendo este tema.

madpitbull_99

Algunos de los que hayan leído sobre este tema, seguramente habrán confundido las referencias con los punteros de C/C++. En realidad no es así, mientras que los punteros apuntan a una dirección de memoria específica, las referencias le están diciendo al interprete de PHP que vamos a usar el contenido de una variable con diferentes nombres.

Veamos un ejemplo:

Código (php) [Seleccionar]

<?php
    $var1 
"valor";
    
$var2 =& $var1;
 
    echo 
$var2//imprime: valor
?>



Como vemos, la variable $var1 contiene la cadena "valor", en el siguiente caso la variable $var2 apunta al contenido/valor de la variable $var1. Por lo que, si cambiamos el valor de $var2 también cambiará el de $var1.

Código (php) [Seleccionar]

<?php
    $var1 
"valor";
    
$var2 =& $var1;
 
    
$var2 "nuevo valor";
    echo 
$var1;//imprime: nuevo valor
?>



La mayoría de los programadores PHP emplean las referencias en OOP para ahorrar recursos. Otro ejemplo para comprender las referencias usando valores numéricos, es el siguiente:

Código (php) [Seleccionar]

<?php
    $b
=5$d=7;
    
$a =& $b;
    
$c =& $d;
    
//Ahora: a=b=5; c=d=7;
    
$b =& $c;
    
//Ahora: a=5, b=c=d=7;
?>



Esto no se limita aquí, se puede pasar parámetros por referencia, devolver referencias, destruirlas y ubicarlas. Un claro ejemplo de como devolver referencias es el de abajo:

Código (php) [Seleccionar]

<?php
    
class foo {
        public 
$valor 42;
 
        public function &
obtenerValor() {
            return 
$this->valor;
        }
    }
 
    
$obj = new foo;
    
$miValor = &$obj->obtenerValor();
    
// $miValor es una referencia a $obj->valor, que es 42.
    
$obj->valor 2;
    echo 
$miValor;
    
// imprime el nuevo valor de $obj->valor, esto es, 2.
?>



Para destruir una referencias se utiliza la función unset($referencia). Actualmente no son muy empleadas, pero si algunas vez os las encontráis en algún código, sabréis cuál es su uso.

Para más información os recomiendo leer el apartado de referencias de php.net.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red