<learndojo />
← Продвинутые возможности PHP
Выбрать правильный код1 баллов

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 нужной части структуры.