Junior — Middle
Quelles étapes supplémentaires sont nécessaires pour une mise en œuvre correcte du motif Singleton, en plus d'interdire le constructeur public?
sobes.tech IA
Réponse de l'IA
Для корректной реализации паттерна Singleton в PHP, кроме запрета публичного конструктора, необходимо:
- Сделать конструктор
privateилиprotected, чтобы предотвратить создание экземпляров извне. - Запретить клонирование объекта, реализовав метод
__cloneи сделав егоprivateили выбросив исключение. - Запретить десериализацию, реализовав метод
__wakeupи сделав егоprivateили выбросив исключение. - Создать статический метод (например,
getInstance), который будет создавать и возвращать единственный экземпляр класса.
Пример:
class Singleton {
private static $instance = null;
private function __construct() {
// приватный конструктор
}
private function __clone() {
// запрет клонирования
throw new \Exception("Cloning is not allowed.");
}
private function __wakeup() {
// запрет десериализации
throw new \Exception("Unserialization is not allowed.");
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
Это гарантирует, что будет создан только один экземпляр класса, и его нельзя будет склонировать или восстановить из сериализованного состояния.