Les fonctions spéciales __sleep et __wakeup sont appelées respectivement par les commandes serialize et unserialize afin de traiter l'objet ou la chaîne de caractères représentant un objet avant la linéarisation ou délinéarisation.
class nom_classe { function __sleep() { //Instructions à accomplir avant serialize()... } function __wakeup() { //Instructions à accomplir avant unserialize()... } }
La fonction serialize recherche la méthode __sleep dans une classe afin de la lancer avant le processus de linéarisation.
Subséquemment, la fonction spéciale __sleep peut effectuer un traitement prélimiaire de l'objet dans le but de terminer proprement toutes les opérations relatives à cet objet, comme la fermeture des connexions sur des bases de données, par ailleurs il est possible également d'entreprendre une suppression des informations superflues ne nécessitant pas de sauvegarde ou encore une réorganisation plus judicieuse, etc..
De même, la fonction unserialize recherche la méthode __wakeup dans une classe afin de la lancer avant le processus de délinéarisation.
Ensuite, la fonction __wakeup peut accomplir des opérations de reconstruction de l'objet en ajoutant des informations, en réouvrant des connexions vers des bases de données, ou encore en initialisant des actions, etc..
Exemple [voir]<?php class semaine { var $erreur; var $jour; function semaine() { $this->jour = array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"); } function __sleep() { for($i = 0; $i < sizeof($this->jour); $i++) { $chaine_result = substr($this->jour[$i], 0, 3); $this->jour[$i] = $chaine_result; } return array('jour'); } function __wakeup() { $d = "di"; $this->jour[0] .= $d; $this->jour[1] .= $d; $this->jour[2] .= "cre".$d; $this->jour[3] .= $d; $this->jour[4] .= "dre".$d; $this->jour[5] .= "e".$d; $this->jour[6] .= "anche"; } } $objet = new semaine(); ?> <br><h3>Objet initial :</h3> <?php print_r($objet); $obj_linearise = serialize($objet); ?> <br><h3>Objet linéarisé :</h3> <?php print_r($obj_linearise); ?> <br><h3>Objet délinéarisé :</h3> <?php $obj_delinerarise = unserialize($obj_linearise); print_r($obj_delinerarise); ?> |