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.