Maison  >  Article  >  développement back-end  >  Comment implémenter le mode singleton en php

Comment implémenter le mode singleton en php

coldplay.xixi
coldplay.xixioriginal
2020-08-06 14:07:362411parcourir

Comment implémenter le mode singleton en PHP : créez d'abord une variable privée statique pour enregistrer l'objet de ce type ; puis empêchez l'utilisation de new pour créer directement l'objet puis empêchez l'utilisation de clone pour cloner l'objet ; ; déterminez enfin si [$instance] est un objet Singleton, sinon, créez-le simplement.

Comment implémenter le mode singleton en php

Comment implémenter le mode singleton en PHP :

Définition du mode singleton : s'assurer qu'une classe n'en a qu'un seul instance et fournissez-lui un point d’accès global.

PHP implémente le mode singleton :

class Singleton
{
    //创建静态私有的变量保存该类对象
    static private $instance;
    //防止使用new直接创建对象
    private function __construct(){}
    //防止使用clone克隆对象
    private function __clone(){}
    static public function getInstance()
    {
        //判断$instance是否是Singleton的对象,不是则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    public function test()
    {
        echo "我是一个单例模式";
    }
}
$sing = Singleton::getInstance();
$sing->test();
$sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in
$sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context

Quelle est l'importance de l'implémentation du mode singleton par PHP :

Cela n'a aucun sens, PHP n'a pas de concept de thread et non asynchrone Le code ne résidera pas en mémoire.Toutes les modifications peuvent être contrôlées par soi-même.Il n'est pas nécessaire de s'assurer que la classe n'a qu'une seule instance. Vous devez utiliser le mode singleton dans la classe de connexion à la base de données. Que se passe-t-il si certaines pages doivent se connecter à deux bases de données ?

Est-ce vraiment inutile ?

Bien sûr que non.

Regardez le code :

class A
{
    public function show()
    {
        echo "我是A类函数,要调用B类函数和C类函数<br/>";
        $b = new B();
        $b->show();
        $c = new C();
        $c->show(&#39;A&#39;);
    }
}
class B
{
    public function show()
    {
        echo "我是B类函数,要调用C类函数<br/>";
        $c = new C();
        $c->show(&#39;B&#39;);
    }
}
class C
{
    public function show($parm)
    {
        echo "我是C类函数,现在被{$parm}类函数调用<br/>";
    }
}
$a = new A();
$a->show();

Lors de l'appel ici, deux objets de classe C sont créés. Nous savons que new est une opération très gourmande en ressources si la classe C est ici un seul In. le mode exemple, une seule fois suffit. Cette idée est correcte, mais nous utilisons généralement une autre méthode pour le faire :

class A
{
    public function show()
    {
        echo "我是A类函数,要调用B类函数和C类函数<br/>";
        $b = Unit::getInstance(&#39;B&#39;);
        $b->show();
        $c = Unit::getInstance(&#39;C&#39;);
        $c->show(&#39;A&#39;);
    }
}
class B
{
    public function show()
    {
        echo "我是B类函数,要调用C类函数<br/>";
        $c = Unit::getInstance(&#39;C&#39;);
        $c->show(&#39;B&#39;);
    }
}
class C
{
    public function __construct()
    {
        echo "C类对象被创建<br/>";
    }
    public function show($parm)
    {
        echo "我是C类函数,现在被{$parm}类函数调用<br/>";
    }
}
class Unit
{
    static public function getInstance($class)
    {
        static $arr = null;
        if (!isset($arr[$class]) || !$arr[$class] instanceof $class) {
            $arr[$class] = new $class();
        }
        return $arr[$class];
    }
}
$a = new A();
$a->show();

Lorsque vous exécutez le code, vous pouvez voir que la classe C n'est instanciée qu'une seule fois, et puis en fait Pendant le fonctionnement, nous utilisons généralement des variables statiques pour enregistrer des objets et implémenter le mode singleton déguisé.

La différence entre le mode singleton et l'utilisation de variables statiques pour implémenter des singletons :

Le mode Singleton force une classe à créer un seul objet, qui est généralement sûr ou affiché sur un interface unifiée Il sera utilisé de temps en temps, et les variables statiques implémentent des singletons principalement pour réduire les nouvelles opérations et ne peuvent pas empêcher les opérations nouvelles et clonées.

Recommandations d'apprentissage associées : programmation php (vidéo)

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