От автора code.mu: РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить