serialize() retourne une chaîne de caractères contenant une représentation linéaire de n'importe valeur qui peut être stockée en PHP. unserialize() utilise cette chaîne de caractère pour recréer l'original de la variable à partir de sa représentation linéaire. Utiliser serialize() pour sauvegarder un objet conservera toutes ses variables. Ses méthodes ne seront pas conservées, seulement le nom de la classe.
Afin de pouvoir désérialiser (unserialize()) un objet, la classe de l'objet doit être définie pour permettre sa reconstruction. En d'autres termes, si vous avez un objet de la classe A et le sérialisez, la représentation linéaire obtenue dépendra de la classe A et contiendra toutes ses variables. Si vous voulez désérialiser la représentation linéaire dans un endroit où la classe A n'est pas définie (dans un autre fichier par exemple), alors vous devrez redéclarer la classe A avant de procéder à la désérialisation de la représentation linéaire. Cela peut-être fait, par exemple, en incluant le fichier de définition de la classe ou en utilisant la fonction spl_autoload_register().
<?php
// class_a.inc.php:
class A {
public $one = 1;
public function show_one() {
echo $this->one;
}
}
// page1.php:
include("class_a.inc.php");
$a = new A;
$s = serialize($a);
// enregistre $s quelque part ou page2.php peut le retrouver
file_put_contents('store', $s);
// page2.php:
// nous avons besoin de la définition de la classe
// pour qu'unserialize() fonctionne
include("class_a.inc.php");
$s = file_get_contents('store');
$a = unserialize($s);
// appel de show_one() sur l'objet $a, affiche 1
$a->show_one();
?>
Si une application utilise le système de sessions et enregistre des objets, ces objets sont sérialisés automatiquement à la fin de chaque page PHP, et sont désérialisés automatiquement à chaque page suivante. Cela signifie qu'une fois mis en session, chaque objet peut apparaître dans n'importe quelle page de l'application ou la session est démarrée. Notez cependant que, concernant la fonction session_register() : Cette fonctionnalité obsolète sera certainement supprimée dans le futur.
Si une application sérialise des objets, il est fortement recommandé, pour son usage futur, que l'application inclut les définitions de classe des objets sérialisés à chaque page. Ne pas faire ainsi aboutirait à un objet désérialisé sans sa définition de classe. PHP donnerait alors à cet objet une classe de type __PHP_Incomplete_Class_Name, qui n'a pas de méthode et produirait un objet inutile.
Dans l'exemple ci-dessus, si $a est enregistré dans la session en exécutant session_register("a"), vous devriez inclure le fichier class_a.inc.php dans toutes vos pages, et non seulement dans page1.php et page2.php