Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас
Посібники 10 червня 2026

Prototype - швидке клонування

Prototype створює нові об'єкти через клонування готового шаблону замість побудови з нуля.

Яку проблему вирішує

Інколи ініціалізація об'єкта дорога або складна: підтягування конфігів, локалі, дефолтів, важкі обчислення в конструкторі. Створювати кожен екземпляр через new з повним проходом ініціалізації - повільно й надлишково, коли потрібен майже такий самий об'єкт.

Як вирішує

Один раз будуємо "еталонний" екземпляр, а далі копіюємо його через clone і донастроюємо лише те, що відрізняється. Клонування пропускає дорогу ініціалізацію.

class InvoiceTemplate
{
  public function __construct(
    public string $currency,
    public string $locale,
  ) {
    // expensive initialization, defaults, locale config
  }

  public function copy(): self
  {
    return clone $this;
  }
}

$template = new InvoiceTemplate('USD', 'en');
$invoice = $template->copy();
$invoice->currency = 'EUR';

Зверніть увагу на clone: PHP за замовчуванням робить поверхневе (shallow) копіювання. Якщо об'єкт містить вкладені об'єкти, їх треба клонувати окремо у магічному методі __clone(), інакше копія і оригінал ділитимуть ті самі вкладені посилання.

Де застосовувати

  • Об'єкти з дорогою або складною ініціалізацією, яких треба багато й майже однакових.
  • Налаштування, DTO, складні об'єкти з дефолтами, які зручно "розмножувати" від шаблону.

Плюси та мінуси

  • + Уникає повторення дорогої ініціалізації.
  • + Створення нового екземпляра стає швидким і керованим.
  • Поверхневе клонування - пастка: вкладені об'єкти треба копіювати вручну у __clone().
  • Надлишковий, якщо створення об'єкта дешеве: звичайний new зрозуміліший за клонування шаблону.
23

Ця стаття - частина серії

Патерни проєктування

4 / 21

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Вакансії за темою

BINTIME Нова
2 дн. тому

Middle Full Stack Developer (PHP/React)

Middle Full Stack розробник для платформи e-commerce на мікросервісах. 70% PHP (Laravel/Symfony, REST APIs, MySQL/PostgreSQL, Redis), 30% React та Blade шаблони. Потрібно 3+ років досвіду з PHP 8.x, Docker, Git, готовність працювати з AI-інструментами (Claude Code, Cursor, Copilot). Можливість розвитку в AI-інженерингу на production-фічах.

SushiBang Нова
2 дн. тому

Middle Laravel / Filament Developer

Розробка та підтримка кастомної CRM-системи для доставки з використанням Laravel 12, Filament 5 та Livewire. Спеціаліст займатиметься проектуванням бази даних, розробкою модулів прийому/обробки замовлень, інтеграцією через REST API та оптимізацією. Вимагається глибоке розуміння Laravel, Filament та PostgreSQL, досвід з Livewire та SQL-оптимізацією. Важливі автономність і відповідальність.

PulsePaw
3 дн. тому

Junior Strong/Middle PHP developer

Розробник PHP/Laravel для фінтех-проекту на мікросервісній архітектурі. Відповідатиме за підтримку та покращення кодової бази, оптимізацію продуктивності, роботу з MySQL, Redis, черг. Потрібні 2+ роки комерційної розробки, 1+ років PHP (Laravel), розуміння OOP та SOLID, мінімальні знання HTML/CSS/JS.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

27,884 v2.4.8 12 15

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,775 15.33.2 8

Відео за темою