interfaces/IDuplicated.md
Интерфейс IDuplicated
Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 1.0
Доступно с: 0.1
Описание
Интерфейс определяет контракт для классов, которые могут быть продублированы (клонированы). Предоставляет метод для создания точной копии объекта.
Методы интерфейса
duplicate()
public function duplicate(): object
Описание: Создает полную копию текущего объекта.
Возвращаемое значение:
object— новый объект-копия
Рекомендации по реализации
-
При реализации интерфейса:
- Убедитесь, что все свойства объекта корректно копируются
- Обработайте вложенные объекты и коллекции
- Сохраните целостность состояния объекта
-
При использовании:
- Используйте метод для создания независимых копий
- Проверяйте, что изменения в копии не влияют на оригинал
- Учитывайте особенности глубокого копирования
Примеры реализации
Базовый пример
class User implements IDuplicated
{
private int $id;
private string $name;
private array $roles;
public function duplicate(): object
{
$clone = new self();
$clone->id = $this->id;
$clone->name = $this->name;
$clone->roles = array_map(function($role) {
return $role->duplicate();
}, $this->roles);
return $clone;
}
}
Пример с глубоким копированием
class Product implements IDuplicated
{
private string $name;
private Price $price;
private array $categories;
public function duplicate(): object
{
$clone = new self();
$clone->name = $this->name;
$clone->price = $this->price->duplicate();
$clone->categories = array_map(function($category) {
return $category->duplicate();
}, $this->categories);
return $clone;
}
}
Особенности реализации
- Метод должен создавать полностью независимый объект
- Необходимо учитывать все свойства объекта
- Вложенные объекты также должны реализовывать IDuplicated
- Следует обрабатывать циклические ссылки
Типичные ошибки
- Неправильное копирование вложенных объектов
- Отсутствие обработки циклических ссылок
- Некорректное копирование коллекций
- Потеря состояния объекта при копировании