Bueno, un poquito, pero nada más ( como me gusta hacerme rogar :D )
Primero, un caso simple para que comencemos a entender por que lado viene el problema.
Código PHP:
<?php
class Prueba
{
function Prueba()
{
//Acá se está preparando el Objeto cuya instancia es "A"
}
}
// Acá, después de la asignación, la variable $obj recibe una COPIA del objeto A, por el uso de la asignación, y no una referencia hacia A. Entonces, podemos decir que en el construcctor, se trabajó con un objeto A y en $obj hay un objeto B que es copia de A
$obj = new Prueba();
?>
Entonces, es esto realmente un problema? Bueno, la mayoría de las veces no, salvo por un pequeño uso extra de memoria innecesaria para hacer la copia. Pero en casos como el siguiente, si es un problema :
Código PHP:
<?php
class Observador
{
function Observador(&$objeto)
{
// Acá como vemos, se le pasa una referencia al Objeto que antes llamamos A
// o sea, el que está en memoria al momento de instaciar
$objeto->agregarObservador($this);
}
}
class Observable
{
var $observadores;
function agregarObservador(&$observador)
{
$this->observadores[] =& $observador;
}
}
// Entonces, primero instanciamos el Objeto que puede ser Observado por otros
$observable = new Observable();
// Y ahora viene el problema de no usar Referencias, y es que al instanciar
// el observador sucede lo siguiente:
$observador = new Observador($observable);
// el Objeto $observable, tiene en su array interno de Observadores al la instancia A
// de Observador, y la variable $observador tiene a la instancia B (copia) del objeto
// O sea que si quisieramos cambiar alguna opcion del objeto:
$observador->set('mostrarHTML', true);
// Estamos cambiando el objeto B y este cambio no se va a reflejar en la instancia A
// que posee el objeto $observable. Esto se puede ver utilizando :
print_r($observador);
print_r($observable->observadores[0]);
?>
Todo esto se resuelve, utilizando siempre el operador & en el New, ya que nos estamos asegurando que $observador ahora es una referencia al MISMO objeto que $observable tiene en su array interno.
Espero que ahora si les quede un poco más claro el asunto...
(mmmhh.. no deberia haber puesto esto como un Tutorial Rápido en zonaPHP? )