Nota:
En PHP 3, los objetos perdÃan su asociación de clase
a lo largo del proceso de seriación y
decodificación. La variable resultante es de tipo objeto,
pero no tiene clase ni métodos, de modo que es
inútil (se ha convertido en algo como una matriz con una
sintaxis curiosa).
| Atención |
La siguiente información es válida para PHP >= 4
únicamente.
|
serialize() devuelve una cadena que contiene una
representación tipo secuencia-de-bytes de cualquier valor
que pueda ser almacenado en PHP. unserialize()
puede causar que éstas cadenas recreen los valores de
variable originales. Usando el método de seriación
para guardar un objeto guardará todas las variables en un
objeto. Las funciones en un objeto no se guardarán,
sólo el nombre de la clase.
Para poder usar unserialize() con un objeto, la
clase de ese objeto necesita ser definida. Es decir, si tiene un
objeto $a de la clase A en pagina1.php y
codifica ésta variable, obtendrá una cadena que hace
referencia a la clase A y contiene todos los valores de variables
contenidas en $a. Si desea tener la capacidad de
revertir el proceso de seriación en pagina2.php, recreando
$a de la clase A, la definición de la
clase A debe estar presente en pagina2.php. Esto puede conseguirse
por ejemplo almacenando la definición de la clase A en un
archivo de inclusión e incluyéndolo tanto en
pagina1.php como en pagina2.php.
Si está usando sesiones y usa
session_register() para registrar objetos,
éstos objetos son seriados automáticamente al final
de cada página PHP, y son decodificados de vuelta
automáticamente en cada una de las siguientes
páginas. Esto quiere decir, básicamente, que tales
objetos pueden aparecer en cualquiera de sus páginas una vez
hacen parte de su sesión.
Es bastante recomendable que incluya las definiciones de clase de
todos esos objetos registrados en todas sus páginas, incluso
si no va a usar realmente éstas clases en todas sus
páginas. Si no lo hace y un objeto está siendo
decodificado sin que su definición de clase esté
presente, perderá su asociación de clase y se
convertirá en un objeto de la clase
stdClass sin ninguna función disponible,
es decir, se hará prácticamente inútil.
De modo que si en el ejemplo anterior $a se
hacÃa parte de una sesión ejecutando
session_register("a"), deberÃa
incluÃrse el archivo clase_a.inc en todas
sus páginas, no sólo en pagina1.php y pagina2.php.