Position actuelle: Accueil> Derniers articles> Modèle de conception de motifs PHP Singleton: explication détaillée des principes et des méthodes de mise en œuvre

Modèle de conception de motifs PHP Singleton: explication détaillée des principes et des méthodes de mise en œuvre

gitbox 2025-07-02

introduire

Le modèle Singleton dans PHP est un modèle de conception largement utilisé qui garantit qu'une classe ne peut créer qu'une seule instance et fournit un point d'accès global pour obtenir l'instance. Ce modèle est généralement utilisé dans les classes qui nécessitent des ressources partagées, telles que les connexions de base de données, les journalistes, etc. Cet article présentera les principes et les méthodes de mise en œuvre du mode Singleton.

principe

L'idée principale du modèle Singleton est: créer une propriété statique privée dans la classe pour enregistrer une instance unique et fournir une méthode statique publique pour obtenir l'instance. Peu importe où la méthode pour obtenir l'instance est appelée, le même objet est toujours renvoyé. Cela garantit qu'il n'y a qu'une seule instance de la classe et fournit un point d'accès global.

accomplir

Mode singleton normal

Voici un exemple de code PHP simple montrant comment implémenter un modèle singleton normal:

 class Singleton {<br>    private static $instance;<br><br>    private function __construct() {<br>        // Constructeur privé,Empêcher le passage directnewPour créer une instance<br>    }<br><br>    public static function getInstance() {<br>        if (!self::$instance) {<br>            self::$instance = new Singleton();<br>        }<br>        return self::$instance;<br>    }<br>}<br>$instance1 = Singleton::getInstance();<br>$instance2 = Singleton::getInstance();<br>var_dump($instance1 === $instance2); // Sortir: bool(true)

Dans cet exemple, la classe Singleton contient une instance de propriété statique privée $ pour contenir une instance unique et fournit une méthode statique publique getInstance () pour obtenir cette instance. Si $ l'instance est vide, une nouvelle instance singleton est créée, sinon l'instance existante est renvoyée directement.

Mode singleton en filetage

Si vous utilisez le modèle Singleton dans un environnement multithread, plusieurs instances peuvent être créées. Pour éviter cela, vous pouvez ajouter un mécanisme de verrouillage de thread dans la méthode getInstance () pour vous assurer qu'un seul thread peut créer une instance. Voici un exemple de l'implémentation du modèle singleton à filetage:

 class Singleton {<br>    private static $instance;<br><br>    private function __construct() {<br>        // Constructeur privé,Empêcher le passage directnewPour créer une instance<br>    }<br><br>    public static function getInstance() {<br>        if (!self::$instance) {<br>            $lock = true;<br>            if ($lock) {<br>                usleep(100); // Simuler l&#39;opération de verrouillage<br>            }<br>            if (!self::$instance) {<br>                self::$instance = new Singleton();<br>            }<br>            $lock = false; // Relâchez le verrouillage<br>        }<br>        return self::$instance;<br>    }<br>}<br>$instance1 = Singleton::getInstance();<br>$instance2 = Singleton::getInstance();<br>var_dump($instance1 === $instance2); // Sortir: bool(true)

Dans ce code, en se moquant du mécanisme de verrouillage (en utilisant la variable de verrouillage $), il garantit que lors de la création d'une instance, un seul thread peut accéder à la méthode getInstance (), évitant ainsi la création de plusieurs instances.

Résumer

Le modèle Singleton est un modèle de conception commun qui garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global pour obtenir cette instance. Cet article présente les principes de base du mode Singleton et montre comment implémenter le mode singleton normal et le mode Singleton en filetage en PHP. En utilisant le mode Singleton, les ressources partagées peuvent être gérées efficacement pour assurer l'unicité et la cohérence des ressources. Cependant, lors de l'utilisation du mode Singleton, il doit également être soigneusement pris en compte pour son impact sur la testabilité et l'évolutivité du code.