Heim > Backend-Entwicklung > PHP-Problem > So implementieren Sie den Singleton-Modus in PHP

So implementieren Sie den Singleton-Modus in PHP

coldplay.xixi
Freigeben: 2023-03-03 22:20:02
Original
2459 Leute haben es durchsucht

So implementiert PHP den Singleton-Modus: Erstellen Sie zunächst eine statische private Variable, um das Objekt dieses Typs zu speichern. Verhindern Sie dann die Verwendung von clone, um das Objekt schließlich zu klonen. $instance] ist ein Singleton-Objekt. Wenn nicht, erstellen Sie es einfach.

So implementieren Sie den Singleton-Modus in PHP

So implementieren Sie ein Singleton-Muster in PHP:

Definition des Singleton-Musters: Stellen Sie sicher, dass eine Klasse nur eine Instanz hat, und stellen Sie einen globalen Zugriffspunkt für den Zugriff darauf bereit.

PHP implementiert den Singleton-Modus:

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
Nach dem Login kopieren

Was ist die Bedeutung der Implementierung des Singleton-Modus durch PHP:

Es macht keinen Sinn. PHP hat kein Thread-Konzept, keinen asynchronen Code und wird nicht im Speicher gespeichert Sie müssen nicht garantieren, dass die Klasse nur eine Instanz hat. Was ist der Sinn? Sie müssen den Singleton-Modus in der Datenbankverbindungsklasse verwenden. Was ist, wenn einige Seiten eine Verbindung zu zwei Datenbanken herstellen müssen?

Ist es wirklich bedeutungslos?

Natürlich nicht.

Sehen Sie sich den Code an:

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();
Nach dem Login kopieren

Während des Aufrufs werden hier zwei Klasse-C-Objekte erstellt Die Idee ist möglich, aber wir verwenden normalerweise eine andere Methode:

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();
Nach dem Login kopieren

Wenn Sie den Code ausführen, können Sie sehen, dass Klasse C nur einmal instanziiert wird. Im tatsächlichen Betrieb verwenden wir im Allgemeinen statische Variablen, um getarnte Objekte zu implementieren das Singleton-Muster.

Der Unterschied zwischen dem Singleton-Modus und der Verwendung statischer Variablen zur Implementierung von Singletons:

Der Singleton-Modus zwingt eine Klasse, nur ein Objekt zu erstellen, das im Allgemeinen für die Sicherheit oder die Anzeige einer einheitlichen Schnittstelle verwendet wird, während statische Variablen hauptsächlich zur Implementierung von Singletons verwendet werden Es dient der Reduzierung neuer Vorgänge und verhindert nicht neue Vorgänge und Klonvorgänge.

Verwandte Lernempfehlungen: php-Programmierung (Video)

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Singleton-Modus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage