Almacenar objetos en una sesión

Voy
explicar a través de un simple ejemplo como guardar un objeto en una
sesión de php y luego recuperarlo. El ejemplo está basado en PHP 5 y
está formado por 3 archivos php:

a.php
Archivo que contiene la definición de la clase
b.php
Archivo que crea la sesión e instancia un objeto de la clase. Luego lo guarda en la variable SESSION
clase.php
Recupera el objeto de SESSION y lo muestra por pantalla
PHP:

  1. //Archivo clase.php
  2. class Clase {
  3.   private $precio;
  4.   private $cantidad;
  5.  
  6.   public function __construct($p, $c){
  7.     $this->cantidad = $c;
  8.     $this->precio = $p;
  9.   }
  10.   public function getTotal(){
  11.     return $this->precio*$this->cantidad;
  12.   }
  13.   public function __toString(){
  14.     return ‘Hay ‘.$this->cantidad.‘ de articulos, que cuestan ‘.$this->precio;
  15.   }
  16. }
PHP:

  1. //Archivo a.php
  2. include(‘./clase.php’);
  3. $obj = new Clase(3, 3.14);
  4. $_SESSION['o'] = serialize($obj);
  5. header (‘Location: ./b.php);
PHP:

  1. //Archivo b.php
  2. include(‘./clase.php’);
  3. $obj = unserialize($_SESSION['o']);
  4. echo $obj.\n;
  5. echo $obj->getTotal();
  6. unset($_SESSION['o']);

La salida de b.php sería

Hay 3 de articulos, que cuestan 3.14
9.42

Básicamente lo que hacemos es utilizar la función serialize para representar el objeto como un string y de esta manera guardarlo en SESSION. Luego con unserialize transformamos la cadena en objeto.

Es importante notar que en el lugar donde transformemos la cadena en
objeto debemos incluir el archivo que contenga la definición de la
clase, para que de esta manera PHP sepa como crear el objeto.

Aquí les dejo como luce el objeto cuando lo serializamos

O:5:"Clase":2:{s:15:" Clase cantidad";i:3;s:13:" Clase precio";d:3.140000000000000124344978758017532527446746826171875;}

Tags: , ,

Leave a Reply