Skip to content
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.