Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/02/2004, 08:11
Avatar de vitxo
vitxo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Más diseño orientado a objetos y PHP4

Llevo unos días dándole vueltas a varias cosas. Más o menos todo va en la línea del ciclo de vida de la ejecución de un programa en PHP y el ciclo de vida de los objetos.

Supongamos que tenemos una clase que implementa un singleton para "forzar" a que sólo exista un sólo objeto de esa clase.
Bien, cuando haya un usuario utilizando la aplicación, podemos asegurar que sólo hay una instancia de esa clase en memoria.
Entonces, surge la pregunta: pero si hay varios usuarios concurrentes, comparten ellos la misma instancia? No lo digo por el problema productor-consumidor, para el caso donde lo estoy aplicando no me tengo que preocupar de las escrituras -porque no las hay- sobre el singleton. (sí, me refiero a la C en MVC )

A lo mejor me estoy rallando un poco, pero cuál es el ciclo de vida un objeto? Desde que lo construyo, hasta cuándo sigue vivo en memoria?
Y la ejecución de una aplicación, empieza cuando el servidor recibe la petición y termina cuando le devuelve la respuesta? No hay ninguna forma de hacer que los objetos persistan para que la aplicación mantenga el estado? (por estado me refiero, a los objetos que formarían un supuesto núcleo ya construidos: controlador, factorías de objetos, iteradores y alguno más)

buff, no sé, a lo mejor me estoy echando un rollo sin sentido.

Para aquellos que eso de singleton suene a chino, he aquí un ejemplo:

Código PHP:
class Controlador {
  
  function 
Controlador(){
    echo 
"[Controlador] Objeto construido<br/>";
  }

  function 
metodo($param='1'){
    return;
  }

  function &
getInstancia(){
    static 
$instancia;
    if ( !isset( 
$instancia ) ){
      
$instancia =& new Controlador();
    }
    return 
$instancia;  
  }

Y un ejemplo que debería "sacar por pantalla" [Controlador] objeto construido una sola vez:
Código PHP:
$c0 =& Controlador::getInstancia();
$c1 =& Controlador::getInstancia();
$c2 =& Controlador::getInstancia();
$c3 =& Controlador::getInstancia();
$c0 -> metodo();
$c2 -> metodo('abc'); 
Siendo c0, c1, c2 y c3 referencias a un mismo objeto.
La llamada esa "rara" al método getInstancia() se debe a que actúa como un método estático o método de clase, el cual no necesita una objeto para ser invocado.

respondiendo que es gerundio.