Sauvegarde d'objets - cas des sessions

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, recr�� la variable $a de la classe A, il faut que la d�finition de la classe A soit pr�sente dans page2.php. 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 {
      var 
$one 1;
    
      function 
show_one() {
          echo 
$this->one;
      }
  }
  
// page1.php:

  
include("classa.inc");
  
  
$a = new A;
  
$s serialize($a);
  
// enregistrez $s o� la page2.php pourra la trouver.
  
$fp fopen("store""w");
  
fwrite($fp$s);
  
fclose($fp);

// page2.php:
  
  // Ceci est n�cessaire pour que unserialize() fonctionne correctement
  
include("classa.inc");

  
$s implode("", @file("store"));
  
$a 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 __PHP_Incomplete_Class_Name 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.