Veamos un ejemplo:
Código
<?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 $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 $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 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.