PHP

Паттерн проектирования Singleton (Одиночка) на PHP

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Singleton (Синглтон, одиночка) относиться к классу порождающих паттернов. Он используется для создания всего одного экземпляра класса, и гарантирует, что во время работы программы не появиться второй. Например в схеме MVC, зачастую этот паттерн используется для порождения главного контроллера (фронтового)

Пример
class Singleton
{
private static
$instance = null;
/**
* @return Singleton
*/
public static function getInstance()
{
if (null === self::$instance)
{
self::$instance = new self();
}
return self::$instance;
}
private function __clone() {}
private function __construct() {}
public function test()
{
var_dump($this);
}
}
$Object = Singleton::getInstance(); // Получение объекта
//Вывод будет одинаковым, так как существует только один экземпляр
$Object -> test();
Singleton::getInstance() -> test();
// Попытка создать дополнительный экземпляр приведет к ошибке
$Object2 = new Singleton(); // Fatal error: Call to private Singleton::__construct() from invalid context
$Object3 = clone $Object; // Fatal error: Call to private Singleton::__clone() from context ''

При первом обращение к функции getInstance будет создан объект, который, впоследствии, будет всем отдаваться. Так как создание другими средствами не представляется возможным, это гарантирует присутствие всего одного экземпляра класса.

В заключение
Метод getInstance фактически является фабричным методом
Начиная с PHP 5.3.0 была добавлена возможность Late Static Bindings, благодаря которой этот паттерн можно реализовать в виде абстрактного класса. Пример для PHP 5.3
Теги:
Singleton, Одиночка, ООП, паттерны проектирования
Добавлено: 27 Мая 2018 20:37:22 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...