Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Guardar objeto en variable de sesión

Estas en el tema de Guardar objeto en variable de sesión en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos, gracias por tomarse el tiempo de leer este problemita. Tengo dos clases: Producto.php y Pedido.php y tengo dos paginas web: index.php e ...
  #1 (permalink)  
Antiguo 04/05/2010, 17:32
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 133
Antigüedad: 17 años, 9 meses
Puntos: 0
Guardar objeto en variable de sesión

Hola a todos, gracias por tomarse el tiempo de leer este problemita.

Tengo dos clases: Producto.php y Pedido.php
y tengo dos paginas web: index.php e index2.php

entonces tengo en index.php:

Código PHP:
session_start();

include_once 
'classes/Pedido.php';
include_once 
'classes/Producto.php';

$cart=new Pedido();

$producto=new Producto();
$producto->set_id(1);
$producto->set_nombre('p1');
$producto->set_precio('10');
$producto->set_cantidad(5);

$cart->set_pedido($producto);
$_SESSION['CART']=$cart
y en el index2.php

Código PHP:

session_start
();

include_once 
'classes/Pedido.php';
include_once 
'classes/Producto.php';

if(isset (
$_SESSION['CART'])){
    
$cart=$_SESSION['CART'];
//else $cart=new Pedido();

echo "Numero de productos: ".$cart->num_productos(); 
pero me manda un horror del tipo:

Código PHP:

Fatal error
main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete objectPlease ensure that the class definition &quot;Pedido&quotof the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /Applications/MAMP/htdocs/SesionesPHP/index2.php on line 18 
Alguien podría explcarme que pasa, de antemano muchisimas gracias por su apoyo
  #2 (permalink)  
Antiguo 04/05/2010, 18:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Guardar objeto en variable de sesión

Tienes que mover el session_start() despues de incluir tus clases, esto es porque cuando anexas una clase a una variable de sesion tienes que incluir la definicion antes de iniciar la sesion.

Saludos.
  #3 (permalink)  
Antiguo 05/05/2010, 07:41
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 6 meses
Puntos: 32
Respuesta: Guardar objeto en variable de sesión

Aprovecho para comentar varios detalles extras en tu código relacionados con POO:
  • debes cambiar los include_once por require_once
  • set_id por setId, etc
  • si num_productos es un atributo público, deberías colocarlo como privado y hacer un getCantidadProductos() o similar
  • y analizar si los set iniciales puedes aprovechar para definirlos en el constructor.
Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 05/05/2010, 11:06
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años, 8 meses
Puntos: 40
Respuesta: Guardar objeto en variable de sesión

Enriqueplace, ¿Por que motivo recomiendas que ponga setId y no set_id? ¿Es por algún motivo en especial?

Un saludo
  #5 (permalink)  
Antiguo 05/05/2010, 11:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Guardar objeto en variable de sesión

http://framework.zend.com/manual/en/...-standard.html Es el estandar, y digo es un recomendación, no es una obligación, puede bien usar set_id() o establece_id(), o establece_el_id_del_objeto() es cuestión de seguir un estandar, pero como recomendación, no pasa nada si usas otras formas o tienes tus propios métodos de codificación.

Saludos.
  #6 (permalink)  
Antiguo 05/05/2010, 11:37
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 6 meses
Puntos: 32
Respuesta: Guardar objeto en variable de sesión

Que tal HeliOs

Por estándar de facto, en la mayoría de los lenguajes OO usan el camelcase, como por ejemplo:
  • clases en singular y primera letra en mayúsculas
  • métodos inician en minúsculas, camelcase
  • una clase por archivo
  • etc

En Java no se discute este estándar mínimo, en PHP teníamos uno lamentable, que ahora se "normalizó" a través de Zend (empresa).

Más info
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 05/05/2010, 11:55
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años, 8 meses
Puntos: 40
Respuesta: Guardar objeto en variable de sesión

Gracias a ambos por la info
  #8 (permalink)  
Antiguo 05/05/2010, 15:34
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 133
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Guardar objeto en variable de sesión

Bueno, agradezco a todos los comentarios realizados en pos a mejorar mi manera de programar, y aunque es verdad que tengo algunos detalles de escritura de código el problema principal lo he solucionado...

He antecedido el siguiente código y de esa forma me he librado del error de no poder asignar objetos a la variable de sesión:

Código PHP:
function  __autoload($class_name) {

  
$classes = Array(
      
'classes/Pedido.php',
      
'classes/Producto.php'
  
);

  for(
$i=0$i<count($classes); $i++)
      if (
file_exists($classes[$i]))
          require_once 
$classes[$i];

Ya los guarda... pero cada vez que refresco la pagina agrega un nuevo elemento sin que haya dado click en el botón:

Tengo el siguiente código:
Código PHP:
if($_POST['agregar']){
    
$producto=new Producto();
    
$producto->set_id($contador);
    
$producto->set_nombre("producto-".$contador);
    
$producto->set_precio($contador."0");
    
$producto->set_cantidad(2);

    
$cart->set_pedido($producto);
    
$_SESSION['CART']=$cart;

Algún metodo que recomienden para evitar este detalle? Lo que interesa es que solo se agrege el producto cuando se de click en el botón agregar, no refrescando el sitio.

De ante mano agradezco a todos por la asesoría.
  #9 (permalink)  
Antiguo 05/05/2010, 17:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Guardar objeto en variable de sesión

Prueba usando if (isset(...

Saludos.
  #10 (permalink)  
Antiguo 06/05/2010, 09:25
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 133
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Guardar objeto en variable de sesión

Cita:
Iniciado por GatorV Ver Mensaje
Prueba usando if (isset(...

Saludos.
ya y ... nop no sirve, sigue el mismo problema al refrescar
  #11 (permalink)  
Antiguo 06/05/2010, 10:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Guardar objeto en variable de sesión

Pues es muy raro, ya que según tu flujo solo se ejecuta si hay variables POST, revisa si no estas insertando los datos en alguna otra parte del flujo de tu programa.

Saludos.
  #12 (permalink)  
Antiguo 07/05/2010, 21:01
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 133
Antigüedad: 17 años, 9 meses
Puntos: 0
Solucionado

Bueno, termine dandole solución utilizando Mootools... gracias a todos por el apoyo.

Etiquetas: objeto, sesión, variables
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




La zona horaria es GMT -6. Ahora son las 06:00.