Foros del Web » Programando para Internet » PHP »

Destruccion de objeto

Estas en el tema de Destruccion de objeto en el foro de PHP en Foros del Web. Necesito crear un script que envie datos cada cierto tiempo por medio de un socket (usando un cron en el servidor), basicamente lo que necesita ...
  #1 (permalink)  
Antiguo 09/04/2012, 00:44
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 12
Pregunta Destruccion de objeto

Necesito crear un script que envie datos cada cierto tiempo por medio de un socket (usando un cron en el servidor), basicamente lo que necesita es hacer los siguientes pasos:

- Obtener los datos a trabajar de la base y guardarlos en un array
- Invocar un objeto que maneja el envio de datos y pasarle un dato del array
- Repetir el proceso hasta terminar los datos del array

El problema es que el objeto de envio no puede ser singleton ya que se requiere invocar varias veces en otras partes del programa, lo que significa que si obtengo un array de 10,000 datos, tendre que crear 10,000 objetos que solo se usan una vez, y me imagino que esto ocupara muchisima memoria y agotara los recursos del servidor

Asi que mi duda es: Puedo destruir el objeto usando unset($obj) para liberar memoria y asi evitar crear multiples objetos?

O sera mejor crear algun metodo estatico dentro de la clase que se pueda estar invocando para enviar datos?, cabe mencionar que este metodo solo se usara en el proceso automatizado

Gracias por su ayuda...
  #2 (permalink)  
Antiguo 09/04/2012, 01:25
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Destruccion de objeto

Pues no veo la necesidad de crear multiples instancias, podrias usar algo como
Código PHP:
Ver original
  1. <?php
  2. class miClase
  3. {
  4.      public function envioDeDatos($dato)
  5.      {
  6.            //// Procesar el dato
  7.      }
  8. }
  9.  
  10. $array_grande = array();
  11. $procesar = new miClase;
  12. while($dato = $array_grande)
  13. {
  14.       $procesar->envioDeDatos($dato);
  15. }
  16. ?>
Me imagino que tu clase pasa los datos por el constructor, podrías modificar la clase para que en vez de que el constructor maneje los datos sea una funcion como te lo puse arriba la que procese el dato
  #3 (permalink)  
Antiguo 09/04/2012, 01:30
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 12
Respuesta: Destruccion de objeto

El problema es que al crearse el objeto se obtienen varios datos mas de la base, como el id del usuario que envio el dato, al llamarse el metodo se toman decisiones de si se puede enviar o no la informacion (y que canal usar) en base a la informacion recopilada y esta informacion varia de usuario a usuario

por eso necesito crear un nuevo objeto, para que se actualizen los datos, se tomen las decisiones adecuadas y despues destruirlo para crearlo de nuevo con los datos del siguiente usuario
  #4 (permalink)  
Antiguo 09/04/2012, 08:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Destruccion de objeto

Claro con unset() borras la referencia al objeto, para eso esta hecho y eso hará que tu script no consuma tanta memoria, pero sí tomará un poco de más tiempo al estar creando y destruyendo el objeto.

Saludos.
  #5 (permalink)  
Antiguo 09/04/2012, 11:14
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 12
Respuesta: Destruccion de objeto

Supongo que sera lo mismo... si creo el metodo estatico, tendre que volver a llamar a practicamente a todo el constructor...

Etiquetas: destruir, estatico
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 11:09.