Méthode __clone

La méthode __clone est appelée automatiquement lors de l'utilisation de l'opérateur clone. Elle permet de définir sa propre logique de copie d'objet. Par défaut, PHP effectue une copie superficielle de toutes les propriétés de l'objet. La méthode __clone est utile lorsqu'il est nécessaire de mettre en œuvre une copie profonde ou de modifier le comportement lors du clonage.

Syntaxe

phppublic function __clone(): void

Exemple

Implémentons un clonage basique d'objet :

php<?php
  class User {
    public $name;
    
    public function __construct($name) {
      $this->name = $name;
    }
    
    public function __clone() {
      echo 'Objet cloné';
    }
  }
  
  $user1 = new User('John');
  $user2 = clone $user1;
?>

Résultat de l'exécution du code :

php'Objet cloné'

Exemple

Implémentons une copie profonde d'objet avec des objets imbriqués :

php<?php
  class Address {
    public $city;
    
    public function __construct($city) {
      $this->city = $city;
    }
  }
  
  class User {
    public $name;
    public $address;
    
    public function __construct($name, $city) {
      $this->name = $name;
      $this->address = new Address($city);
    }
    
    public function __clone() {
      $this->address = clone $this->address;
    }
  }
  
  $user1 = new User('John', 'New York');
  $user2 = clone $user1;
  $user2->address->city = 'Boston';
  
  echo $user1->address->city;
?>

Résultat de l'exécution du code :

php'New York'

Exemple

Ajoutons un identifiant unique lors du clonage :

php<?php
  class Product {
    public $id;
    public $name;
    
    public function __construct($name) {
      $this->id = uniqid();
      $this->name = $name;
    }
    
    public function __clone() {
      $this->id = uniqid();
    }
  }
  
  $product1 = new Product('Laptop');
  $product2 = clone $product1;
  
  echo $product1->id . ' ' . $product2->id;
?>

Résultat de l'exécution du code (exemple) :

php'5f1a2b3c 5f1a2b3d'

Voir aussi

  • la méthode __construct,
    qui est le constructeur d'objet