Metodo __clone
Il metodo __clone viene chiamato automaticamente quando si utilizza l'operatore clone.
Permette di definire una logica personalizzata per la copia dell'oggetto. Per impostazione predefinita, PHP
esegue una copia superficiale di tutte le proprietà dell'oggetto. Il metodo __clone è utile
quando è necessario implementare una copia profonda o modificare il comportamento durante la clonazione.
Sintassi
public function __clone(): void
Esempio
Implementiamo la clonazione base di un oggetto:
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __clone() {
echo 'Oggetto clonato';
}
}
$user1 = new User('John');
$user2 = clone $user1;
?>
Risultato dell'esecuzione del codice:
'Oggetto clonato'
Esempio
Implementiamo una copia profonda di un oggetto con oggetti annidati:
<?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;
?>
Risultato dell'esecuzione del codice:
'New York'
Esempio
Aggiungiamo un identificatore unico durante la clonazione:
<?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;
?>
Risultato dell'esecuzione del codice (esempio):
'5f1a2b3c 5f1a2b3d'
Vedi anche
-
metodo
__construct,
che è il costruttore dell'oggetto