clone и __clone()
Что выведет код?
<?php
class User
{
private int $id = 0;
public function setId(int $id): void { $this->id = $id; }
public function getId(): int { return $this->id; }
public function __clone(): void { $this->id = 0; }
}
$user1 = new User();
$user1->setId(50);
$user2 = clone $user1;
echo $user1->getId() . ':' . $user2->getId();
Подсказки
- Теория: $b = $a связывает две переменные с одним объектом. clone создаёт новый внешний объект, а __clone() позволяет настроить состояние новой копии и глубину копирования.
Что проверяет это задание
Обычное присваивание объекта передаёт ссылку на тот же экземпляр. clone создаёт новый внешний объект, но вложенные объекты по умолчанию остаются общими (shallow copy). Метод __clone() запускается для новой копии и позволяет отдельно клонировать вложенные объекты, получая deep copy нужной части структуры.