Aller au contenu
Clonage d'objets avec PHP

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.