![]() |
Objetos globales?? hello everybody!! Solo para hacer una pregunta, es posible crear un objeto, pero que lo pueda usar en todas mis paginas PHP, es decir, que no pierda sus atributos que le halla asignado el momento de instanciarlo, y que pueda usarlo por todos mis documetnos PHP, algo asi como las seciones. es eso posible??? thanks!! |
Pues ... No estoy seguro pero creo que no. PHP crea las variables cuando las usa y eso solo ocurre en una sola pagina. Por eso muchas personas usan las cookies y las sesiones para almacenar el contenido de una variable "X" y asi poder usarlo en otra pagina. Una sugerencia seria que crearas una sesion o una cookie para almacenar el contenido de esta variable y entonces cuando no las vayes a usar mas simplemente las destruyes y ya. Salu2 :pensando: |
Existen maneras de simular la persistencia de objetos a través de distintas llamadas, y esto es algo que se utiliza hace mucho tiempo en PHP. Tan simple como crear una tabla con los atributos de tu objeto, y luego un Mapper, que cargue esos datos desde la tabla, instancie el objeto necesario, le cargue los datos y lo devuelva. Supongamos que tenemos la definición de un objeto en un archivo class.Objeto.php: Código PHP: Código PHP: Código PHP: Espero que les haya servido el ejemplo. Saludos. |
Muy didáctica la respuesta Webstudio... Ahora... esto es así de sencillo para un objeto simple... pero si tenemos objetos relacionados entre sí supongo que el mapeo de objetos a tablas (y viceversa) se complicaría más o menos de acuerdo al tipo de relación que los une (herencia, agregación, composición). Saludos:adios: |
Cita:
|
complementando un poco la exposicion de Webstudio, te puedo decir jpinedo que inclusive ya existen implementaciones de mappers en php uno lo puedes consultar en la documentacion de las pear http://pear.php.net/manual/en/packag...dataobject.php y el otro es una implementacion para php5 que tambien puedes consultar en http://propel.phpdb.org/wiki/ en particular he usado el primero, y a un que es interesante la herramienta todavia tiene algunas deficiencias a mi gusto, como el hecho de que se complica la programacion cuando estamos usando tablas que comparten la misma PK en varias relaciones. La segunda implementacion no he tenido tiempo de probarla a conciencia pero pudes probarla tu y despues comentarnos tu experiencia. |
Ok... muchas gracias a los dos... en cuanto tenga algo de tiempo me meto de cabeza a revisar los enlaces propuestos por ustedes. Ahora tengo otra duda con respecto al mapeo que propone Webstudio... Es verdad que la persistencia de objetos se puede solucionar con el mapeo. Pero me parece que si se está dentro de la misma sesión no sería conveniente en términos de rendimiento hacer dicho mapeo objeto-BD (y viceversa). Simplemente podría guardarse la información necesaria (los atributos o los objetos serializados) en variables de sesión y desde ahí reconstruir los objetos. Otro sería el caso si se necesitara que los objetos persistan de una sesión a otra. Digo esto, porque evidentemente el código de Webstudio se maneja dentro de una misma sesión. Supongo nuevamente que esto dependerá de la aplicación. Saludos:adios: |
Jpinedo, esto es verdad hasta que la session està activa. Normalmente la session tinen una vida determinada por el php.ini en los parámetros: -session.cookie_lifetime especifica la duración de la cookie en segundos que se manda al navegador. El valor 0 significa "hasta que se cierra el navegador", y es el que se encuentra por defecto. -session.cache_expire especifica el tiempo-de-vida de las páginas de la sesión que se encuentran en el caché en minutos. No tiene efecto para el limitador nocache. Por defecto vale 180. Textos extraidos de la documentación de php |
Yo creo que te has confundido y no has entendido mi duda. Mi duda no va por el lado de la expiración de las sesiones, sino de la conveniencia (o no conveniencia) de utilizar un mapper como el que propone Webstudio cuando estamos dentro de la misma sesión. Saludos:adios: |
Definitivamente decidiria por la solucion de Webstudio, ya que si requiero un objeto global a todo la aplicacion que pueda ser accedido con idenpendencia de la sesion, me sirve mas el mapper ya que el estado de un objeto esta en funcion de sus propiedades, asi que partiendo de ese punto facililtas el almacenamiento y recuperacion mediante una consulta que intentar otra cosa. Ahora si estas dentro de una sesion y sabes que el objeto va estar cambiando su estado en cada peticion puede entonces ser factible serializar el objeto y al final guardarlo. todo depende de lo que necesites. |
Perfecto... Gracias! Saludos:adios: |
Hola!!!!!!!!!!!!! podrian explicarme como se serializa un objeto que esta dentro de una sesion, porq he leido algo sobre eso pero aun no me queda claro . . . Saludos!!!!!! |
No se serializa el objeto que está en la variable de sesión. Se serializa el objeto antes de guardarlo en una variable de sesión. Luego, lo desserializas para reutilizarlo. Recuerda que siempre necesitas tener la definición de la clase (el código de la clase) en los scripts que utilizarán ese objeto desserializado. Serializar: función serialize() http://www.php.net/serialize Des-serializar: función unserialize() http://www.php.net/unserialize Saludos:adios: |
También puedes ver este artículo de zonaphp: (te pongo el enlace a la parte en la que se toca el tema de serialización... pero deberías leerlo todo) http://www.zonaphp.com/index.php?mod...&id=1&pagina=7 Saludos:adios: |
Gracias por tu respuesta, pero no consigo resolver el problemilla Hola, disculpa por la insistencia pero he leido de todo y no se q hacer para resolver este problema con los objetos q los he puesto como variables de sesion, lei sobre serializacion y lo q me quedo claro que solo me sirve para conservar los atributos :neurotico Deje esto en otro tema en el mismo foro, aver si me das una manito porfis :'( Pasa q ademas del objeto de conexion tengo otro objeto que guarda el pedido q se realiza, este ultimo objeto es de la clase Carrito . . . lo q pasa es q cuando uso uno de estos en un pagina funciona pero cuando uso los dos ahi viene el error. Las clases son asi: <? class Carrito(){ } session_start(); if (!isset($_SESSION['ocarrito'])){ $_SESSION['ocarrito']=new carrito; $_SESSION['ocarrito']->carrito(); } ?> <? class conexion(){ } session_start(); if (!isset($_SESSION['oconexion'])){ $_SESSION['oconexion'] = new conexion() ; $_SESSION['oconexion']->conectar(); } ?> Los uso asi: require('conexionBD.php'); $_SESSION['oconexion']->conectar(); require('carrito.php'); $_SESSION['ocarrito']->compras_hechas(); en esta ultima linea sale el error: Fatal error: Unknown(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>carrito</b> of the object you are trying to operate on was loaded _before_ the session Porfis ayudemme no se donde estoy haciendo mal o quiza asi no se usan las sesiones Gracias |
jeka... Te aconsejo hacer tu pregunta en un tema aparte (nuevo) para que sean lo más específicos posible. Un saludo:adios: |
Código PHP: Código PHP: |
Con la aclaración de Herrminio todo debe funcionar correctamente. Y yo, aclarando lo que puse sobre la serialización, se me fue de las manos que estábamos hablando de sesiones: Lo que pasa es que los objetos almacenados en sesiones se serializan/desserializan automáticamente al guardarlos/leerlos sin necesidad de utilizar las funciones explícitamente (serialize()/unserialize()). http://www.php.net/manual/es/languag...ialization.php Quería aclarar esto, ya que lo que puse antes puede dar lugar a confusiones. Saludos:adios: |
| La zona horaria es GMT -6. Ahora son las 15:39. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.