Hola amigos, hace tiempo que solo leo y necesitaba de vuestras prodigiosas cabecitas jeje... Cuento:
Tengo un archivo smanager que utilizo para administrar objetos... el código es el siguiente:
Código PHP:
<?php
// Clases nativas del motor
include_once("clases/main.php");
include_once("clases/mysql.php");
include_once("clases/user.php");
// creamos a reanudamos la session actual
session_start();
// Recuperación de la clase del onjeto
ini_set('unserialize_callback_func', 'rClase');
function rClase($r) {
switch ($r) {
case 'Main':
include_once("clases/main.php");
break;
case 'User':
include_once("clases/user.php");
break;
case 'MySQL':
include_once("clases/mysql.php");
break;
default:
echo "#smanager.php - 'Respuesta ".$r."'.";
}
}
// Instancias y recuperación de sessiones
if (!isset($_SESSION['Me'])) {
$Me = new Me();
$_SESSION['Me'] = serialize($Me);
} else { $Me = unserialize($_SESSION['Me']); }
if (!isset($_SESSION['MySQL'])) {
$MySQL = new MySQL();
$_SESSION['MySQL'] = serialize($MySQL);
} else { $MySQL = unserialize($_SESSION['MySQL']); }
if (!isset($_SESSION['User'])) {
$User = new User($MySQL);
$_SESSION['User'] = serialize($User);
} else { $User = unserialize($_SESSION['User']); }
?>
Crea/almacena y recupera perfectamente los objetos, almacenando tan solo un string en la variable tipo
session para no entorpecer demasiado la memoria del servidor. El problema se produce cuando intento lanzar el constructor de la clase USER, este necesita el objeto MySQL para actualizar la información sobre su visita en la DB.
He intentado enviar directamente el obj al constructor con la finalidad de crear una referencia a el dentro de una variable perteneciente al nuevo objeto, pero no consigo resultados.
Muestro la clase user.php
Código PHP:
class User {
//Control
public $Ready = false;
private $MySQL;
public $isOnline = false;
//User info
public $id = -1;
public $ip;
public $userid = -1;
public $tiempo;
public $provincia = -1;
public $municipio = -1;
public $mail;
public $user;
// -- Constructor
function __construct($dbObject) {
$this->MySQL = $bdObject;
$this->Ready = $this->LoadSession(); //Lanza LoadSession
}
// -- LoadSession (LoadSession) : Inicia el usuario
private function LoadSession() {
echo "MySQL: ".$This->MySQL->Ready;
return true;
}
}
La idea es no almacenar otro objeto entero en la session si no utilzar el mismo objeto MySQL para todo el trabajo.
La respuesta del servidor es:
Ninguna, tendría que devolver el valor bool de Ready, (0 o 1), devuelve el valor en blanco.
Estoy trabajando con PHP5.
**EDITO> Parece ser que en php5 (yo anteriormente use una version 4.x) una de sus muchas modificaciones a sido redise;ar el sistema oo, cosa que no ha venido nada mal xP, al parecer ahora los objetos se trabajan con ref., es mas, creo que a partir de php 5.3 al utilizar el operador
& imprime un WARNING. He modificado el codigo eliminando dicho operador pero no consigo resultado.
Gracias de antemano.
PD> El codigo ya fue modificado en la parte principal
Gracias de ante mano, un saludo!!