Ver Mensaje Individual
  #4  
Antiguo 21-10-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.108
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Io
Pensé en utilizar la variable $_SESSION, pues creía que se mantendría durante toda una sesión, con independencia de la página en la que te encuentres.
Hum... no estoy seguro. No suelo utilizar esa variable, y no estoy seguro de si podría guardar instancias de clases... me da que no, pero, es una especie de pálpito sin valor alguno, porque ya digo que no lo sé.

Cita:
Empezado por Io
Cuando me comentas lo de utilizar, una variable global...qué ambito tendría esta variable. si la creo en index.php, cuando me redireccione a index2.php, ¿seguiría vigente esa variable?, o sería mejor crearla en un documento comun: comun.php.
Depende de lo que entendamos por "redirección". Tú puedes crear una variable global en "index.php", requerir el archivo "index2.php" y seguir usando dicha variable. Ahora bien, si realmente "cargas" o "rediriges" (como dices) de una página a otra... me temo que el remedio está en lo último que dices: crear la variable en "comun.php" y requerir dicho archivo tanto en "index.php" como en "index2.php".

Aquí hay que ver el asunto de "mantener la instancia de una clase" entre sesiones... o en distintas páginas... Creo que para esto debe usarse la "serialización" de objetos (serialize(), unserialize()), puesto que de otro modo no se me ocurre... Pero, tal vez es un problema de concepto, quiero decir, de pensar que es preciso mantener la instancia de una determinada clase a toda costa.

Yo, por ejemplo, ahora trabajo con cierto proyecto en el que hago uso de varias variables globales que contienen instancias de objetos. Pues bien, estas están ahí disponibles para todos los Scripts PHP que se requieran (nunca mejor dicho) en el sistema, pero, cuando "redirigo" al usuario a otra página, es menester incluir el archivo "común" de que hablamos antes, de modo que las variables estén disponibles "de nuevo".

Evidentemente, son nuevas instancias de las variables, no son la misma, pero, en el caso de mi sistema basta y sobra de este modo, es decir, las variables en cuestión cumplen con unas determinadas funciones y lo que es menester es que estén disponibles, no que sean "la misma instancia" siempre. Pero, no sé si me estoy explicando correctamente...

Trataré de poner un ejemplo sin resultar pesado. Yo tengo una clase "Opciones" que maneja las opciones del usuario. Permite "setear" opciones, obtener el valor de las opciones, conseguir las opciones "por defecto", etc. Pues bien, lo que hago es instanciar una variable "global" del objeto "Opciones" en el archivo común de que venimos hablando, pero, da igual que no sea la misma instancia siempre, puesto cualquier objeto de esta clase hará lo que se espera de ella.

Hablando de serialización... lo mismo te interesa esto, justamente. Seguramente puedes guardar la instancia de una determinada clase "serializada" en la sesión de usuario, en una base de datos, o donde quieras, de modo que cuando "deserializes", obtengas una nueva variable, sí, pero, que vendría a ser una "copia" de la instancia de la clase que guardaste. Ahora bien, esto sí que lo veo más factible, porque, cuando guardas una clase "serializada" en la sesión de usuario, por ejemplo, estás guardando una cadena de caracteres.

Así que el asunto (y me estoy extendiendo ya mucho, pido disculpas) puede pasar por usar la serialización, si es que necesitas mantener a toda costa la misma instancia de una clase (pero tendrías que "deserializarla" antes de usarla, claro está), o, más sencillamente aún, por ver si podrías apañarte como yo con la clase "Opciones", que no precisa que sea la misma instancia... (¿hasta cuándo? ¿siempre?) sino que puede cumplir con su función en el momento en que es instanciada.

Respecto de las funciones que "no te funcionan"... bueno... habría que ver los resultados que te ofrecen, pero, el asunto puede no ser tanto ver si un objeto ha sido destruido, sino que, ya no existe, sencillamente. Y para esto debería servir cualquiera de las funciones mencionadas (según qué quiera hacerse), puesto que una variable que no contiene la instancia de un objeto, o más aún que no contiene nada... será "empty", será "null", no estará "seteada"... y con eso sabes que no existe, independientemente de si fue creada o no antes.

Piensa además en otra cosa: mantener en memoria una determinada variable... tiene un coste. Así que aunque pudiera hacerse (que no lo sé bien, como digo), lo cierto es que puede que el coste supere el beneficio. No sé si me explico. Ya te digo. En el sistema en que trabajo (que acaso veas pronto por aquí...) hago uso de variables globales que contiene instancias de objetos, pero, no tienen que ser "la misma instancia", no es necesario que esto sea así.

Por último... tal vez si dices qué quieres conseguir, para qué quieres hacer lo que dices, yo o algún otro compañero podamos ayudarte a hacerlo de otro modo... Y, disculpa el rollo que he soltado... que lo mismo no tiene muchos pies ni cabeza...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita