Sobes.tech
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, кроме запрета публичного конструктора, необходимо:

  1. Сделать конструктор private или protected, чтобы предотвратить создание экземпляров извне.
  2. Запретить клонирование объекта, реализовав метод __clone и сделав его private или выбросив исключение.
  3. Запретить десериализацию, реализовав метод __wakeup и сделав его private или выбросив исключение.
  4. Создать статический метод (например, 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;
    }
}

Это гарантирует, что будет создан только один экземпляр класса, и его нельзя будет склонировать или восстановить из сериализованного состояния.