Clonage d'objets avec PHP

Exemple de code sous PHP5

<?php 
  class ObjectTracker
  {
      private static $nextSerial = 0;
      private $id;
      private $nomObjet;
 
      function __construct($nomObjet)
      {
          $this->nomObjet = $nomObjet;
          $this->id = ++self::$nextSerial;
      }
 
      function __clone()
      {
          $this->nomObjet = "Clone de " . $this->nomObjet;
          $this->id = ++self::$nextSerial;
      }
 
      function lireID()
      {
          return($this->id);
      }
 
      function lireNom()
      {
          return($this->nomObjet);
      }
  }
 
$ot = new ObjectTracker("Objet de Zeev");
$ot2 = clone $ot;
 
print($ot->lireID()." ".$ot->lireNom(). "<br>\n");
print($ot2->lireID()." ".$ot2->lireNom(). "<br>\n");
print($ot->lireID()." ".$ot->lireNom(). "<br>\n");
?>

Affiche :

1 Objet de Zeev
2 Clone de Objet de Zeev
1 Objet de Zeev

Attention au clonage

Le clonage est une méthode à prendre avec de grosses pincettes. Notamment parce que PHP va toujours faire un clonage de tous les attributs de l'objet avant d'appeler notre méthode de clonage clone(). Ainsi, à l'appel dans la méthode clone(), les attributs de l'objet sont déjà valués à partir de l'objet source du clonnage :

  • dans le code ci-dessous :
$this->nomObjet = "Clone de " . $this->nomObjet;
  • représente en fait :
nouveauNom = "Text" + valeur de la copie effectuée par PHP.
 
docs/php/clone.txt · Dernière modification: 2006/11/21 23:21 (édition externe)
Recent changes RSS feed Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki DNS by XNAME LaFraise.com :: éditeur de bien jolis Tee-shirts