Sérialisation d'objetsSérialiser des objets - des objets en sessionserialize retourne une chaîne de caractères contenant
une représentation linéaire de n'importe quelle valeur qui
peut être stockée en PHP. unserialize peut utiliser cette
chaîne de caractères pour recréer la valeur originale 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, seul le nom de la classe le sera.
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 fera référence à la classe A et contiendra toutes
ses variables. Si vous voulez pouvoir désérialiser cette 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 sa 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.
one;
}
}
// page1.php :
include("class_a.inc.php");
$a = new A;
$s = serialize($a);
// enregistre $s quelque part où 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 sérialise des objets, il est fortement recommandé, pour son usage
futur, que l'application inclut les définitions des classes des objets sérialisés
à chaque page. Ne pas faire ainsi pourrait aboutir à 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.
Ainsi, dans l'exemple ci-dessus, si $a était enregistré dans la session en
exécutant session_register("a"), vous devriez inclure le fichier
class_a.inc.php dans toutes vos pages, et pas seulement dans
page1.php et page2.php
Notez que vous pouvez également utiliser les événements de linéarisation et de dé-linéarisation
sur un objet en utilisant les méthodes __sleep() et
__wakeup(). L'utilisation de
__sleep() vous permet également de seulement linéariser
une partie des propriétés de l'objet.