Método __clone
El método __clone se llama automáticamente cuando se usa el operador clone.
Permite definir la lógica propia de copia del objeto. Por defecto, PHP
realiza una copia superficial de todas las propiedades del objeto. El método __clone es útil
cuando es necesario implementar una copia profunda o cambiar el comportamiento al clonar.
Sintaxis
public function __clone(): void
Ejemplo
Implementemos la clonación básica de un objeto:
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __clone() {
echo 'Objeto clonado';
}
}
$user1 = new User('John');
$user2 = clone $user1;
?>
Resultado de ejecutar el código:
'Objeto clonado'
Ejemplo
Implementemos la copia profunda de un objeto con objetos anidados:
<?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;
?>
Resultado de ejecutar el código:
'New York'
Ejemplo
Añadamos un identificador único al clonar:
<?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;
?>
Resultado de ejecutar el código (ejemplo):
'5f1a2b3c 5f1a2b3d'
Ver también
-
método
__construct,
que es el constructor del objeto