Singleton на PHP
Сінглтон – це, напевно, найпростіший із шаблонів проектування, і в той же час найпоширеніший. Його часто використовують для створення підключення до БД, логування подій, використання конфігураційного файлу та з багатьох інших причин. Ціль цього шаблону - гарантувати існування єдиного екземпляра класу (такі екземпляри і називаються синглтонами). Причина, через яку зазвичай він створюється: забезпечити доступ до синглтона всьому додатку.
Справа в тому, що при розробці коду в стилі ООП слід уникати глобальних змінних. І щоб не використовувати їх у проекті, і був придуманий цей шаблон.
Тепер розберемося, як реалізовувати типовий синглтон.
Для початку оголосимо клас Singleton із приватним конструктором:
Начебто дурість створювати приватний конструктор, оскільки ззовні цього класу неможливо буде створити його екземпляр. Але саме це нам і потрібне! Адже екземпляр класу можна створити у статичному методі. Так і вчинимо:
Так, тепер ми можемо створювати безліч екземплярів об'єкта виклик статичної функції. Але нам потрібен все один екземпляр. Тоді треба якимось чином контролювати створення екземплярів об'єкта. Це робиться просто: оголошується статична приватна змінна, яка за умовчанням нічому не дорівнює. При виклик статичного методу Singleton::getInstance() перевіряється на наявність значення у статичної змінної. Якщо значення не встановлено – то створюємо об'єкт і повертаємо його, якщо значення змінної вже встановлено – то повертаємо його. Ось так:
Тепер точно все.
Шаблон Сінглтон дуже схожий на глобальні змінні: і тим, і іншим часто зловживають. Також при використанні синглтона можуть вийти такі залежності,які ускладнюватимуть налагодження програми. А якщо в такому випадку зміниться синглтон, доведеться перевіряти всі місця його використання. Однак головна відмінність синглтона від глобальної пемеренної: його значення не можна ніяк затерти. І хоча наявність цього факту говорить за пріоритетність його використання.
Загалом, як і завжди, якщо грамотно його використовувати – він принесе лише користь.