interfaces/IDuplicated.md


Интерфейс IDuplicated

Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 1.0
Доступно с: 0.1

Описание

Интерфейс определяет контракт для классов, которые могут быть продублированы (клонированы). Предоставляет метод для создания точной копии объекта.

Методы интерфейса

duplicate()

public function duplicate(): object

Описание: Создает полную копию текущего объекта.

Возвращаемое значение:

  • object — новый объект-копия

Рекомендации по реализации

  1. При реализации интерфейса:

    • Убедитесь, что все свойства объекта корректно копируются
    • Обработайте вложенные объекты и коллекции
    • Сохраните целостность состояния объекта
  2. При использовании:

    • Используйте метод для создания независимых копий
    • Проверяйте, что изменения в копии не влияют на оригинал
    • Учитывайте особенности глубокого копирования

Примеры реализации

Базовый пример

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
  • Следует обрабатывать циклические ссылки

Типичные ошибки

  • Неправильное копирование вложенных объектов
  • Отсутствие обработки циклических ссылок
  • Некорректное копирование коллекций
  • Потеря состояния объекта при копировании

На главную | Содержание