Note :
En PHP 3, les objets perdent leur association de classe à travers
le processus de sauvegarde et relecture. Le type de la variable après
relecture est bien objet mais il n'a plus de méthode ou de nom
de classe. Cela rend la focntionnalité plutôt inutile (l'objet
est devenu un tableau avec une syntaxe étrange).
La documentation suivante n'est valable que pour PHP 4.
serialize() retourne une chaîne représentant
une valeur qui peut être stockée dans les sessions de PHP, ou une
base de données. unserialize() peut relire cette
chaîne pour recréer la valeur originale. serialize()
va sauver toutes les variables d'un objet. Le nom de la classe sera
sauvé mais par les méthodes de cet objet.
Pour permettre à unserialize() de lire un objet,
la classe de cet objet doit être définie. C'est-à-dire, si vous avez
un objet $a de la classe A dans une page php1.php, et que vous le
linéarisez avec serialize(), vous obtiendrez une
chaîne qui fait référence à la classe A, et contient toutes les valeurs
de $a. Pour pouvoir le relire avec la fonction unserialize()
dans une page page2.php, il faut que la définition de la classe
A soit présente dans cette deuxième page. Cela peut se faire
de manière pratique en sauvant la définition de la classe A dans un
fichier séparé, et en l'incluant dans les deux pages page1.php et
page2.php.
<?php
classa.inc:
class A {
var $one = 1;
function show_one() {
echo $this->one;
}
}
?>
page1.php:
<?php
include("classa.inc");
$a = new A;
$s = serialize($a);
// enregistrez $s où la page2.php pourra le trouver.
$fp = fopen("store", "w");
fputs($fp, $s);
fclose($fp);
?>
page2.php:
<?php
// Ceci est nécessaire pour que unserialize() fonctionne correctement
include("classa.inc");
$s = implode("", @file("store"));
unserialize($s);
// maintenant, utilisez la méthode show_one de l'objet $a.
$a->show_one();
?>
Si vous utilisez les sessions et la fonction session_register()
pour sauver des objets, ces objets seront linéarisés automatiquement
avec la fonction serialize() à la fin de chaque
script, et relus avec unserialize() au début du prochain
script. Cela signifie que ces objets peuvent apparaître dans n'importe quelle
page qui utilise vos sessions.
Il est vivement recommandé d'inclure la définition de classe dans
toutes vos pages, même si vous n'utilisez pas ces classes dans
toutes vos pages. Si vous l'oubliez et qu'un tel objet est
présent, il perdra sa classe, et deviendra un objet de classe
stdClass sans aucune fonction, et donc, plutôt
inutile.
Si, dans l'exemple ci-dessus, $a devient un objet de session
avec l'utilisation de session_register("a"), vous
devez pensez à inclure le fichier classa.inc dans toutes
vos pages, et pas seulement page1.php et page2.php.