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
public function __clone(): void
Exemple
Implémentons un clonage basique d'objet :
<?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 :
'Objet cloné'
Exemple
Implémentons une copie profonde d'objet avec des objets imbriqués :
<?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 :
'New York'
Exemple
Ajoutons un identifiant unique lors du clonage :
<?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) :
'5f1a2b3c 5f1a2b3d'
Voir aussi
-
la méthode
__construct,
qui est le constructeur d'objet