Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/10/2007, 09:13
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Ejemplo: carga centralizada de clases, uso semidescentralizado y singleton.

No entiendo tu ejemplo, cuando tu haces:
archivo: ejemplo.php
Código PHP:
$foo "foo desde ejemplo"
archivo: index.php
Código PHP:
$foo "foo inicial";
include( 
"ejemplo.php" );

echo 
$foo
Es lo mismo que esto:
Código PHP:
$foo "foo inicial";
$foo "foo desde ejemplo";

echo 
$foo
Es decir, al usar el include el interprete de PHP incluye el archivo en el punto desde donde se llama y ejecuta el contenido, asi que aqui no estas aplicando Singleton correctamente.

Singleton es la capacidad de usar un objeto mismo en todos los ambitos de ejecucion (en PHP es en cada request), imagina algo asi:

Código PHP:
class {
     public function 
algoA() {
          
$obj Singleton::getInstance();
          
$obj->setValor"Valor alterado en A" );
     }
}

class 
{
      public function 
algoB() {
            
$obj Singleton::getInstance();
            
$obj->setValor("Valor alterado desde B");
       }
}

class 
{
        public function 
algoC() {
                
$obj Singleton::getInstance();
                
$obj->setValor("Valor cambiado desde C!");
        }
}

$a = new A();
$b = new B();
$c = new C();

$instance Singleton::getInstance();
echo 
sprintf"Viendo valor inicial de Singleton: %s"$instance->getValor() );
echo 
"Alterando desde A";
$a->algoA();
echo 
sprintf"Valor de Singleton: %s"$instance->getValor() );
echo 
"Alterando desde B";
$b->algoB();
echo 
sprintf"Valor de Singleton: %s"$instance->getValor() );
echo 
"Alterando desde C";
$c->algoC();
echo 
sprintf"Valor de Singleton: %s"$instance->getValor() ); 
Aqui como puedes ver 3 clases diferentes usan el mismo objeto y alteran su valor, y pueden estar regados en archivos diferentes (cada clase en su file) pero todos se refieren al mismo objeto en el runtime a la hora de usar el Singleton que es la clase unica.

Saludos.