<?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
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 :
$this->nomObjet = "Clone de " . $this->nomObjet;
nouveauNom = "Text" + valeur de la copie effectuée par PHP.