Circum Blog

Circum Net – IT – Conseils pratiques

Prolonger la durée de vie des objets en PHP

PHP, Programmation

Etant donnée que la durée de vie d’un objet n’excède pas la durée d’exécution du script qui le crée, quand un objet est détruit, les valeurs de ses attributs (les variables membres) sont perdues! Situation peu confortable si l’on pense à utiliser ces données ultérieurement ou à les échanger entre programmes.

Pour pallier cette difficulté on peut avoir recours aux opérations de sérialisation et désérialisation. Grâce à celles-ci, il est possible de conserver l’état d’un objet sur un support de stockage de façon à pouvoir en recréer une copie exacte ultérieurement ; mais également de transmettre l’objet par valeur d’une application à une autre.

La sérialisation consiste donc à stocker les valeurs des attributs d’une instance d’un objet dans une séquence linéaire. La fonction “serialize” retourne une chaîne contenant une représentation linéaire de l’objet qui lui est passé en argument, pour stockage.

La désérialisation consiste à accepter des informations stockées et à recréer des objets à partir de celles-ci. La fonction “unserialize” retourne sous forme d’objet la séquence passée en argument.

Voyons cela à travers un exemple :

Script tools.inc.php – la classe à l’origine des objets dont on veut enregistrer l’état.

<?php
class Book
   {
   private $type;
   private $price;
   private $title;

   function Book($par)
        {
        $this->type = $par;
        }

   public function setPrice($par)
        {
        $this->price = $var;
        }
        
   public function getPrice()
        {
        return $this->price;
        }
        
   public function setTitle($par)
        {
        $this->title = $par;
        }
        
   public function getTitle()
        {
        return $this->title;
        }
    }
?>
page1.php – l’instanciation de l’objet et sa sérialisation.

<?php
/* Appel à la définition de classe */
include("tools.inc.php");

$myBook = new Book('1');
$myBook->setTitle('The Black Dahlia');
$myBook->setPrice('19');	


/* Sérialisation de l'objet */
$s = serialize($myBook);

/* Ecriture de la séquence sur disque */
$fp = fopen("store", "w");
fputs($fp, $s);
fclose($fp);
?>
page2.php – la récupération de l’objet sérialisé.

<?php
/* Appel à la définition de classe */
include("tools.inc.php");

/* Récupération de la séquence */
$s = implode("", @file("store"));

/* Désérialisation et récupéartion de l'objet*/
$aBook = unserialize($s);

echo $aBook->getTitle();
/* Affiche "The Black Dahlia" */
?>