Метод __clone
Методот __clone се повикува автоматски при употреба на операторот clone.
Тој овозможува да се дефинира сопствена логика за копирање на објектот. Стандардно, PHP
извршува површно копирање на сите својства на објектот. Методот __clone е корисен
кога треба да се имплементира длабоко копирање или да се промени однесувањето при клонирање.
Синтакса
public function __clone(): void
Пример
Да имплементираме основно клонирање на објект:
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __clone() {
echo 'Објектот е клониран';
}
}
$user1 = new User('John');
$user2 = clone $user1;
?>
Резултат од извршување на кодот:
'Објектот е клониран'
Пример
Да имплементираме длабоко копирање на објект со вгнездени објекти:
<?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;
?>
Резултат од извршување на кодот:
'New York'
Пример
Да додадеме уникатен идентификатор при клонирање:
<?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;
?>
Резултат од извршување на кодот (пример):
'5f1a2b3c 5f1a2b3d'
Погледнете исто така
-
метод
__construct,
кој е конструктор на објектот