PHP
PHP / MySql

Recherche
 
ManuelPHP.com

parent
<<<
Sauvegarde d'objets - cas des sessions Les fonctions magiques __sleep et __wakeup
>>>

5.9 Les classes et les objets (PHP 4)
5 Référence du langage
 Manuel PHP

Les classes : class
extends : héritage
Constructeur
Opérateur de contexte de classe ( :: )
parent
->Sauvegarde d'objets - cas des sessions
Les fonctions magiques __sleep et __wakeup
Références dans un constructeur
Comparer des objets

5.9.6 Sauvegarde d'objets - cas des sessions

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 .

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 .

<< Sauvegarde d'objets - cas des sessions >>
parent Les classes et les objets (PHP 4) Les fonctions magiques __sleep et __wakeup





Google

Services webmasters

Les manuels
 

ManuelPHP.com © 2003-2012 Tigersun - Crédits
Webmaster Site Internet - Télécharger des Logiciels - Programme TV - Entraide Informatique - Agence de Communication
2018-09-19