Foros del Web » Programando para Internet » PHP »

Variables de sesion de tipo arreglo de objetos

Estas en el tema de Variables de sesion de tipo arreglo de objetos en el foro de PHP en Foros del Web. Saludos. Soy nuevo en PHP y en el foro, tengo el siguiente problema y espero me puedan ayudar: 1) Tengo una clase class ClaseA { ...
  #1 (permalink)  
Antiguo 14/06/2011, 10:59
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 12 años, 10 meses
Puntos: 1
Pregunta Variables de sesion de tipo arreglo de objetos

Saludos.

Soy nuevo en PHP y en el foro, tengo el siguiente problema y espero me puedan ayudar:

1) Tengo una clase

class ClaseA
{
var $var1;
var $var2;

function ClaseA($xvar1, $xvar2)
{
$this->var1 = $xvar1;
$this->var2 = $xvar2;
}
}

2) Esta clase la incluyo en otro archivo donde una vez que inicializo la sesion (despues de validar al usuario y password) leo una base de datos (de SQL) y despues inicializo un arreglo de variables de sesion de este objeto con la información de la BD, incluso antes y despues de esta operación inicializo otras variables de sesión...

...
$_SESSION['otravar1'] = 123;

while ($result_row = mssql_fetch_row($result))
{
$_SESSION['xvariable'][$contador] = new ClaseA($result_row[0],$result_row[1]);
$contador = $contador + 1;
}
$_SESSION['otravar2'] = 456;

// Inlcuso despues de inicializar las variables las despliego para validar su correcta inicializacion y todo OK
echo "xvariable[0].var1 = ".$_SESSION['xvariable'][0]->var1." "; //resultado en pantalla: valor1
echo "xvariable[1].var1 = ".$_SESSION['xvariable'][1]->var1." "; //resultado en pantalla: valor2
...

3) Despues de inicilizar las variables de sesion salto a otras paginas y no tengo problema en recuperar los valores de las otras variables de sesion pero no puedo recuperar los valores de las variables de sesion de tipo objeto... este es el problema...

echo "otravar1 = ".$_SESSION['otravar1']." "; //resultadoen pantalla: otravar1 = 123
echo "otravar2 = ".$_SESSION['otravar2']." "; //resultadoen pantalla: otravar2 = 456

echo "xvariable[0] = ".$_SESSION['xvariable'][0]." "; //resultado en pantalla = ¡¡¡Nada!!!
echo "xvariable[1] = ".$_SESSION['xvariable'][1]." "; //resultado en pantalla = ¡¡¡Nada!!!

Espero tener su valiosa ayuda...
  #2 (permalink)  
Antiguo 14/06/2011, 11:48
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Variables de sesion de tipo arreglo de objetos

pues en mis años de programacion nunca pase arreglos por sesion.
pero seme ocurre desarmarla y pasarla como string con implode() y luego rearmarla con explode().
  #3 (permalink)  
Antiguo 14/06/2011, 15:11
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Variables de sesion de tipo arreglo de objetos

Muchas gracias enlinea777...

Después de tu comentario pensé que a lo mejor estaba haciendo algo que como tal no se puede (y lo digo porque voy iniciando en PHP)... en fin solucione el problema pasando un "arreglo de arreglos" en lugar de un "arreglo de objetos"


...
while ($result_row = mssql_fetch_row($result))
{
$_SESSION['xvariable'][$contador] = array($result_row[0],$result_row[1]);
$contador = $contador + 1;
}
...

haciendo referencia a la variable de sesión así...

echo "xvariable[0].var1 = ".$_SESSION['xvariable'][0][0]." "; //resultado en pantalla: valor campo 1 del registro 1
echo "xvariable[0].var2 = ".$_SESSION['xvariable'][0][1]." "; //resultado en pantalla: valor campo 2 del registro 1
echo "xvariable[1].var1 = ".$_SESSION['xvariable'][1][0]." "; //resultado en pantalla: valor campo 1 del registro 2
echo "xvariable[1].var2 = ".$_SESSION['xvariable'][1][1]." "; //resultado en pantalla: valor campo 2 del registro 2
...


Mil gracias a todos!!!
  #4 (permalink)  
Antiguo 15/06/2011, 14:49
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Variables de sesion de tipo arreglo de objetos

jajaja eso era no me fije bien en eso de arreglo de objetos.
como bien decias los objetos no pueden pasarse a las seciones para eso estan echos los arreglos.
me alegro que te fuera de ayuda el comentario.
  #5 (permalink)  
Antiguo 15/06/2011, 15:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Variables de sesion de tipo arreglo de objetos

De hecho sí es posible guardar en una sesión objetos. Ejemplo
Código PHP:
Ver original
  1. class.php
  2. <?php
  3. class Foo
  4. {
  5.     private $_foo;
  6.  
  7.     public function setFoo($foo){
  8.         $this->_foo = $foo;
  9.     }
  10.  
  11.     public function getFoo()
  12.     {
  13.         return $this->_foo;
  14.     }
  15. }

Código PHP:
Ver original
  1. a.php
  2. <?php
  3. require_once 'class.php';
  4. $foo = new Foo;
  5. $foo->setFoo('foobar');
  6.  
  7. $_SESSION['foo'] = serialize($foo);
  8. header('Location: b.php');

Código PHP:
Ver original
  1. b.php
  2. <?php
  3. require_once 'class.php';
  4. $foo = unserialize($_SESSION['foo']);
  5. echo $foo->getFoo(); // imprime foobar
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 15/06/2011, 15:28
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Variables de sesion de tipo arreglo de objetos

abimaelrc si estas en lo correcto pero recuerda que serialize lo que crea es una string codificada para poder rearmarla y no perder las esructuras.
en extricto rigor no se pueden guardar objetos en sesiones.
  #7 (permalink)  
Antiguo 15/06/2011, 15:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Variables de sesion de tipo arreglo de objetos

De hecho sí es posible, y no es necesario ni si quiera utilizar serialize, el mismo manual indica que si guardas un objeto en una sesión, solo es necesario que incluyas la definición de la clase antes de mandar a llamar session_start().
  #8 (permalink)  
Antiguo 15/06/2011, 16:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Variables de sesion de tipo arreglo de objetos

Aunque lo que he visto, que la forma recomendada o la forma de uso es con serialize. Claro está despues que se cumplan con los requisitos, más información http://www.php.net/manual/en/languag...ialization.php
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 16/06/2011, 07:36
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Variables de sesion de tipo arreglo de objetos

jajajaja

AL FINAL QUE FUE PRIMERO EL O LA


  #10 (permalink)  
Antiguo 16/06/2011, 07:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Variables de sesion de tipo arreglo de objetos

Cita:
Iniciado por abimaelrc Ver Mensaje
Aunque lo que he visto, que la forma recomendada o la forma de uso es con serialize. Claro está despues que se cumplan con los requisitos, más información http://www.php.net/manual/en/languag...ialization.php
Lo que indica es que no debes de usar session_register() (que de hecho ya esta deprecated) sobre un objeto, lo mejor es incluir la definición de la clase antes de llamar a session_start:
objeto.php
Código PHP:
Ver original
  1. class MiObjeto {
  2.        private $_nombre;
  3.        public function __construct() {}
  4.        public function setNombre($nombre) { $this->_nombre = $nombre; }
  5.        public function getNombre() { return $this->_nombre; }
  6. }

page1.php
Código PHP:
Ver original
  1. require_once ('objeto.php');
  2. $obj = new MiObjeto();
  3. $obj->setNombre("Foo");
  4. $_SESSION['obj'] = $obj;
  5. header('Location: page2.php');

page2.php
Código PHP:
Ver original
  1. require_once ('objeto.php');
  2. echo $_SESSION['obj']->getNombre();

Etiquetas: objetos, tipo, variables, arreglos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:19.