Hola:
A raíz de otra pregunta de aviana sobre cómo utilizar atributos estáticos en PHP4... estuve revisando la implementación de un Singleton que dejó Webstudio en este post:
http://www.forosdelweb.com/showpost....68&postcount=7
Pues al probarlo me dí con la sorpresa de que no funciona como se espera. Y tiene que ver con el hecho de referenciar a o no la primera instancia.
Este es el ejemplo que probé:
Código PHP:
class Ejemplo{
var $atributo;
function &instancia(){
static $_instancia;
if(empty($_instancia)){
$_instancia = & new Ejemplo();// OJO!!! A esta línea me voy a referir
}
return $_instancia;
}
}
$obj1 = &Ejemplo::instancia();
$obj1->atributo = "Uno";
$obj2 = &Ejemplo::instancia();
$obj2->atributo = "Dos";
echo $obj1->atributo;// Esperaríamos que imprima "Dos"
Si se referencia tal como está puesto en la línea marcada... no funciona, pues sigue creando nuevas instancias.
Si en esa línea no se pone el operador "&", o sea simplemente se deja:
Código PHP:
$_instancia = new Ejemplo();
Ahí sí funciona.
¿Alguien podría explicar el por qué de este comportamiento?
Saludos