Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/06/2012, 08:25
davidpv92
 
Fecha de Ingreso: diciembre-2007
Mensajes: 14
Antigüedad: 16 años, 10 meses
Puntos: 0
Problema con POO, objeto por referencia

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!!

Última edición por davidpv92; 16/06/2012 a las 09:16