Serialización con php

PHP no soporta la persistencia de objetos. En OOP los objetos persistentes son objetos que mantienen su estado y funcionalidad a través de múltiples invocaciones de la aplicación. Esto puede resolverse salvando el objeto en un archivo o en una base de datos y restaurando los datos cada vez que se ejecuta dicha aplicación. El mecanismo es conocido como serialización. PHP provee un método de serialización que puede ser llamado por los objetos . El método de serialización devuelve un string representando el objeto. La serialización guarda las propiedades del objeto pero no sus métodos.

En PHP4 si se serializa un objeto al string $s, se destruye el objeto, y entonces utilizando la desserialización de objeto en $obj se puede mantener el acceso a las propiedades del objeto. Esto no es recomendado por dos razones: la primera es porque no se garantiza que en futuras versiones esto siga funcionando. La segunda es porque si se serializa un objeto, se guarda a disco el string y se sale del script, al correr en el futuro dicho script no nos aseguramos que los métodos del objeto sean los mismos, ya que en la serialización sólo se guardaron las propiedades. Concluyendo, serialización sólo sirve en PHP para guardar las propiedades de un objeto nada más (se puede serializar un vector asociativo para salvarlos a disco por ejemplo).

NOTA: La version 4.0.1 de PHP4 soporta serializacion de objetos en forma completa!!!

Ejemplo: < ?php $obj=new Classfoo(); $str=serialize($obj); // Se salva $str al disco //...algunos meses más tarde //Se recupera str del disco $obj2=unserialize($str) ?>

En este caso tenemos las propiedades recuperadas pero no podemos utilizar los métodos. Esto hace que la forma de recuperar $obj2->x el valor de “x” sea la única forma posible (no tenemos métodos!), por lo que esta práctica no es recomendada.

Estas son algunas maneras para arreglar el problema, las que veremos muy por encima, ya que son formas muy enmarañadas de resolverlo. Full serialización será uno de los agregados más esperados en PHP.

Nota: Enhorabuena, PHP 4.0.1 soporta “full serialization” de objetos.

Fuente: Documento Generación de web sites dinámicos usando PHP