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

Singleton - один екземпляр

Singleton гарантує, що клас має лише один екземпляр на весь застосунок, і дає до нього спільну точку доступу.

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

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

Як вирішує

У Laravel замість класичного Singleton зі static-властивістю та приватним конструктором використовують контейнерний singleton: app()->singleton(...). Контейнер створює об'єкт один раз і повертає той самий екземпляр на всі залежності.

class CurrencyRegistry
{
  private array $rates = [];

  public function set(string $code, float $rate): void
  {
    $this->rates[$code] = $rate;
  }

  public function get(string $code): float
  {
    return $this->rates[$code] ?? 1.0;
  }
}

app()->singleton(CurrencyRegistry::class);

Чому контейнерний варіант кращий за класичний static: останній намертво "зашиває" залежність, його важко підмінити у тестах і неможливо мати дві різні конфігурації. Контейнерний singleton зберігає всі переваги DI - його легко замокати через app()->instance(...) або swap(), а клас отримує залежність через звичайний конструктор.

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

  • Справді єдині на застосунок ресурси: реєстри, пул з'єднань, кешований конфіг.
  • Для більшості сервісів singleton не потрібен - звичайне зв'язування і так передасть потрібну залежність через конструктор.

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

  • + Економія ресурсів і єдиний централізований стан.
  • + Контейнерний варіант лишається тестованим і підмінним.
  • Глобальний стан ускладнює тести й приховує залежності.
  • У довгоживучих процесах (Octane, queue worker) singleton зі станом запиту чи користувача спричинить витік даних між запитами - тримайте в singleton лише stateless або справді глобальний стан.
32

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

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

5 / 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

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