Methode __clone
De methode __clone wordt automatisch aangeroepen bij gebruik van de clone operator.
Hiermee kan men eigen kopieerlogica voor een object definiëren. Standaard voert PHP
een ondiepe kopie (shallow copy) uit van alle eigenschappen van het object. De methode __clone is nuttig
wanneer men een diepe kopie (deep copy) moet implementeren of het gedrag bij het klonen wil aanpassen.
Syntaxis
public function __clone(): void
Voorbeeld
Laten we basiskloning van een object implementeren:
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __clone() {
echo 'Object gekloond';
}
}
$user1 = new User('John');
$user2 = clone $user1;
?>
Resultaat van de code-uitvoering:
'Object gekloond'
Voorbeeld
Laten we diepe kopiëring van een object met geneste objecten implementeren:
<?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;
?>
Resultaat van de code-uitvoering:
'New York'
Voorbeeld
Laten we een unieke identifier toevoegen bij het klonen:
<?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;
?>
Resultaat van de code-uitvoering (voorbeeld):
'5f1a2b3c 5f1a2b3d'
Zie ook
-
de methode
__construct,
die de constructor van het object is