Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/12/2008, 15:55
califa010
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 4 meses
Puntos: 5
Respuesta: Problema tras recuperar una instancia de una clase mediante la sesión.

Hola,

Efectivamente, todo lo que sean "recursos" (como conexiones a bases de datos) se pierden al guardar un objeto en la sesión. Sólo se mantienen los datos del objeto, que se serializan automáticamente al guardar el objeto. La definición de los métodos, por ejemplo, tampoco se guarda, por lo que al recuperar el objeto de la sesión, el archivo que define la clase tiene que estar incluido o también te va a dar un error. (Más detallado: http://ar.php.net/manual/es/language...ialization.php)

Para solucionar el problema, tal vez podrías poner un método conectar que puedas llamar al recuperar el objeto. Algo así:


Código PHP:
public function __construct() {
     
$this->connect();
}

public function 
connect() {
    
$this->conexion pg_connect(etc);
    return 
$this-conexion;

Y desde el código que recupera el objeto:

Código PHP:
$obj $_SESSION['obj'];
$obj->connect();
$obj->algunaConsulta(); 
Otra posibilidad para mantener la misma "interfaz" y no forzar a los "clientes" de la clase a conectarse explícitamente, podría ser que el método conectar sea privado y se llame desde los otros métodos si la conexión está cerrada. Algo así:


Código PHP:
public function algunaConsulta() {
     if( (!
$this->conexion && $this->connect()) || $this->conexion ) {
          
//  no había conexión y logró conectarse 
          // o ya había conexión
          // hacer la consulta
     
} else {
         
// error, no había conexión y falló al intentar conectarse
     
}

Saludos
Juan Pablo Califano