Exemple de code sous PHP5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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 :

1
$this->nomObjet = "Clone de " . $this->nomObjet;

représente en fait :

1
nouveauNom = "Text" + valeur de la copie effectuée par PHP.