Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/03/2005, 17:31
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 21 años, 5 meses
Puntos: 41
Sobre variables estáticas y Singleton en PHP4

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