🟠Контроль над созданием объекта
Иногда требуется, чтобы у определенного класса был только один экземпляр в течение жизненного цикла программы. Это может быть связано с тем, что данный объект использует значительные ресурсы или имеет состояние, которое должно быть уникальным.
🟠Глобальная точка доступа
Синглтон предоставляет простой способ доступа к объекту из любой точки программы. Это упрощает управление состоянием приложения, поскольку все части программы могут взаимодействовать с одним и тем же экземпляром объекта.
🚩Как используется?
1⃣Закрытие конструктора
Конструктор объявляется закрытым (private), чтобы предотвратить создание объекта напрямую через оператор
new.2⃣Закрытие клонирования
Метод клонирования (magic method
__clone()) тоже объявляется закрытым, чтобы запретить клонирование объекта.3⃣Закрытие десериализации
Метод десериализации (magic method
__wakeup()) также объявляется закрытым, чтобы предотвратить восстановление объекта из строки.4⃣Статический метод для получения экземпляра
Создается статический метод, который проверяет, существует ли уже экземпляр объекта. Если нет, то создается новый; если да, то возвращается существующий.
Пример
class Singleton {
// Статическое свойство для хранения единственного экземпляра
private static $instance;
// Закрытый конструктор для предотвращения создания объекта через new
private function __construct() {}
// Запрет клонирования объекта
private function __clone() {}
// Запрет десериализации объекта
private function __wakeup() {}
// Метод для получения единственного экземпляра
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
// Пример метода
public function sayHello() {
echo "Hello, Singleton!";
}
}
// Использование синглтона
$singleton = Singleton::getInstance();
$singleton->sayHello(); // Выведет "Hello, Singleton!"🟠Контролируемое создание
Конструктор закрыт, поэтому экземпляр можно создать только внутри класса через метод
getInstance().🟠Глобальная доступность
Поскольку метод
getInstance() статический, он доступен в любом месте кода, что делает доступ к экземпляру глобальным.🟠Один экземпляр
Проверка в методе
getInstance() гарантирует, что будет создан только один экземпляр класса.Ставь 👍 и забирай 📚 Базу знаний