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.
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 penser à inclure le fichier classa.inc dans toutes
vos pages, et pas seulement page1.php et page2.php.
Précédent | Sommaire | Suivant |
parent | Niveau supérieur | Les fonctions magiques __sleep et __wakeup |