Maison >développement back-end >tutoriel php >Comment implémenter le modèle de conception Singleton en PHP5 ?

Comment implémenter le modèle de conception Singleton en PHP5 ?

DDD
DDDoriginal
2024-12-13 03:08:08615parcourir

How to Implement the Singleton Design Pattern in PHP5?

Modèle de conception Singleton en PHP5

L'implémentation du modèle de conception Singleton en PHP5 implique de créer une classe qui ne peut avoir qu'une seule instance, quelle que soit la manière dont plusieurs fois, il est instancié. Ceci est réalisé en utilisant une variable statique pour stocker l'instance unique et en empêchant le clonage ou la désérialisation.

Voici un exemple de la façon de créer une classe Singleton en PHP5 :

final class UserFactory
{
    private static $inst = null;

    // Prevent cloning and de-serializing
    private function __clone(){}
    private function __wakeup(){}

    /**
     * Call this method to get singleton
     *
     * @return UserFactory
     */
    public static function Instance()
    {
        if self::$inst === null) {
            self::$inst = new UserFactory();
        }
        return self::$inst;
    }

    /**
     * Private ctor so nobody else can instantiate it
     *
     */
    private function __construct()
    {

    }
}

Ceci l'implémentation utilise une variable statique $inst pour stocker l'instance unique de la classe UserFactory. La méthode Instance() sert de getter singleton. Si $inst est nul, une nouvelle instance est créée et affectée à $inst.

Pour utiliser cette classe Singleton, appelez simplement la méthode Instance() pour obtenir l'instance unique :

$fact = UserFactory::Instance();
$fact2 = UserFactory::Instance();

La comparaison de $fact et $fact2 donnera vrai, confirmant qu'il s'agit de la même instance.

Cependant, tenter d'instancier directement un nouvel objet UserFactory l'utilisation de new UserFactory() générera une erreur car le constructeur est rendu privé. La seule façon d'obtenir une instance de la classe UserFactory est d'utiliser la méthode Instance().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn