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 fonctionnalité plutôt inutile (l'objet
est devenu un tableau avec une syntaxe étrange).
| Attention |
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.
Exemple 18-15.
La classe d'un objet doit être définie avant sa délinéarisation
<?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.