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