Curso POO PHP Serialización de obxectos
Serialización de obxectos
Todas as variables almacenan a súa información en memoria dunha forma ou outra segundo o seu tipo. Os obxectos, non obstante, non teñen un único tipo. Cada obxecto terá uns atributos ou outros en función da súa clase. Polo tanto, cando necesitamos almacenar os obxectos para empregalos posteriormente (por exemplo, nun arquivo, nunha base de datos, ou na sesión do usuario), fai falta convertelos a un formato estándar. Este proceso chámase serialización.
En PHP, para serializar un obxecto utilízase a función serialize. O resultado obtido é un string que contén un fluxo de bytes, no que se encontran definidos todos os valores do obxecto.
$p = new Produto();
$s = serialize($p);
Esta cadea pódese almacenar en calquera parte, como pode ser a sesión do usuario, ou unha base de datos. A partir dela, é posible reconstruír o obxecto orixinal utilizando a función unserialize.
$p = unserialize($s);
As funcións serialize e unserialize utilízanse moito con obxectos, pero serven para converter nunha cadea calquera tipo de dato, agás o tipo resource. Cando se aplican a un obxecto, converten e recuperan toda a información deste, incluíndo os seus atributos privados. A única información que non se pode manter utilizando estas funcións é a que conteñen os atributos estáticos das clases.
Almacenamento dos obxectos na sesión do usuario
Se simplemente queremos almacenar un obxecto na sesión do usuario, en PHP aínda é máis doado. Os obxectos que se engadan á sesión do usuario son serializados automaticamente. Polo tanto, non é necesario usar serialize nin unserialize.
session_start();
$_SESSION['produto'] = $p;
// Non é necesario facer $_SESSION['produto'] = serialize($p);
Para poder deserializar un obxecto, debe estar definida a súa clase. Ao igual que antes, se o recuperamos da información almacenada na sesión do usuario, non será necesario utilizar a función unserialize.
session_start();
$p = $_SESSION['produto'];
De calquera xeito, se temos problemas coa serialización automática de obxectos tamén podemos seguir empregando as funcións serialize e unserialize.
--Víctor Lourido 13:57 28 jun 2013 (CEST)