АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
347 of 410 menu

Метад __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,
    які з'яўляецца канструктарам аб'екта
byenru