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,
    който е конструктор на обект
Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне