Sérialisation d'objets
Sérialiser des objets - des objets en session
serialize() 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().
<?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 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 utilise le système de sessions et enregistre des objets à l'aide de session_register(), 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, ces objets peuvent apparaître dans n'importe quelle page de l'application où la session est démarrée. Notez cependant que la fonction session_register() est supprimée depuis PHP 5.4.0
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.
Version en cache
21/11/2024 22:43:43 Cette version de la page est en cache (à la date du 21/11/2024 22:43:43) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-language.oop5.serialization.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.