Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Más diseño orientado a objetos y PHP4

Estas en el tema de Más diseño orientado a objetos y PHP4 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/02/2004, 08:11
Avatar de 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.
  #2 (permalink)  
Antiguo 12/02/2004, 08:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En principio .. sea OOP o programación lineal. PHP ejecuta tu scirpt y al terminar cierra conexiones con tus BD, sockets abiertos y desecha toda variable que puedas haber usado.

Por lo demás .. podrías revisar el tema de:

register_shutdown_function() en www.php.net .. tal vez eso te interese.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/02/2004, 08:40
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Oye, interesante esa función.

Mira que llevo días diciendo lo de consultar la documentación y ahora soy yo al que se le aplica lo del RTFM
  #4 (permalink)  
Antiguo 12/02/2004, 08:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Mira que llevo días diciendo lo de consultar la documentación y ahora soy yo al que se le aplica lo del RTFM
jajaja. Bueno .. si le sacas partido a la funcioncita nos haces un mini HOW-TO con un ejemplito .. que yo por ejemplo no me he metido a probar el tema .. pese que ya me dí mis vueltas por el RTFM y me "sonaba" la función ... xDDDD

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 12/02/2004, 09:02
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Okis, lo apunto en mi lista de ToDO, pero me cachis, he terminado exámenes y prácticamente estoy de vacaciones hasta la próxima semana y no paro!!! buffff si estudiara así de bien para la carrera estaría acabándola! :D

un saludete.
  #6 (permalink)  
Antiguo 12/02/2004, 09:25
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Vitxo, lamentablemente PHP no cuenta con una VM persistente como la que cuenta JAVA; por lo que los objetos que crees por cada petición de usuario, morirá indefectiblemente cuando termine el Script. Es tan triste como la vida misma, pero es así.

Por eso, cuando implementas un Singleton, estás garantizándote que PARA ESA PETICION de ese UNICO USUARIO estás utilizando 1 misma instancia de 1 solo objeto, pero si en el mismo momento tenés 14 personas navgando el sitio, vas a tener indefectiblemente 14 instancias de ese objeto.

La única manera que se me ocurre de mantener estado entre varios usuarios, sería utilizando un DataMapper en los objetos que querés mantener persistentes... y aunque cada usuario seguirá utilizando 1 instancia de cada uno de estos objetos diferente, al menos en el momento de instanciar el objeto van a tener la ultima imagen almacenada en la base de datos.

Es eso... o programar en JAVA, lo cuál cada día me incita más.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #7 (permalink)  
Antiguo 12/02/2004, 09:30
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Ya tío, es que yo vengo de Java como quien dice, aunque llevo ya un tiempo metido con OOP PHP.
Por lo menos, si tienes 14 usuarios sólo tenes 14 instancias. Pero aseguras que no sean másde 14.

Por cierto, en PHP5 se pueden hacer cosas muy chulas. Esto no habrá cambiado? No tengo mucha idea, no he leido mucho sobre PHP5.
Será compatible hacia atrás? Tragará PHP4? Porque sino reescribir phpMyAdmin debe ser un INFIERNO :)
  #8 (permalink)  
Antiguo 12/02/2004, 09:58
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Por defecto, PHP5 será backwards-compatible con PHP4 en todo aspecto, incluso respetando el uso de referencias y todo eso ( que no será necesario, pero no daña tampoco ). Incluso, se llegó a mencionar en las listas de discusión de desarrollo, el colocar una directiva en el PHP.ini que "forzara" a una compatibilidad mayor entre PHP5 y PHP4, como puede ser el no utilizar los constructores __construct y los métodos de sobrecarga de operadores __set, __get y __call. Pero igualmente, dudo que implementen una VM al estilo Java... no es el propósito de PHP hacerlo :(

Suerte.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #9 (permalink)  
Antiguo 12/02/2004, 10:10
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Ya, tampoco hay que pedirle peras al olmo, eso está claro. Pero, permíteme la paja mental, no habrá una forma de persistir el objeto? No es ese el objetivo de serializar un objeto... aunque no recuerdo dónde lei que el método de serialización por defecto no era muy aconsejable.
Bueno, más que reinventar la rueda es es rizar el rizo. :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:17.