Was ist das Singleton-Muster?
Entwurfsmuster, das nur eine Objektinstanz über diese Klasse in der gesamten Anwendung instanziieren kann
Modusklassifizierung?
In allen Musterdesigns gibt es drei grundlegende Designmuster: Singleton-Muster, Fabrikmuster und Registrierungsbaummuster. Heute bringen wir das Singleton-Muster mit.
Warum den Singleton-Modus verwenden?
1. PHP befasst sich häufig mit Datenbanken. Wenn häufig Verbindungsobjekte hergestellt und neue Vorgänge in der Anwendung ausgeführt werden, werden große Mengen an Systemspeicherressourcen verbraucht. (Ressourcenaufwand sparen)
2. In Teamkooperationsprojekten kann der Singleton-Modus den künstlichen Systemverbrauch effektiv vermeiden, der dadurch verursacht wird, dass verschiedene Programmierer ihre eigenen Objekte neu erstellen. (Ressourcenaufwand sparen)
----------------3 Schritte und 1 einzelnes Beispiel umsetzen ------------ - -----
Schritt 1: Kapseln Sie die Konstruktormethode private __construct( ) { }
Grund: Der Konstruktor ist in new The Die erste Methode, die aufgerufen wird, wenn ein Objekt ein Konstruktor ist, wird als privat oder geschützt deklariert, was bedeutet, dass sie mit der neuen Methode kein Instanzobjekt erstellen kann.
Schritt 2: Erstellen Sie Objektinstanzen über Methoden innerhalb der Klasse. static Single(){ }
Grund: Wir rufen häufig die Methode des Objekts auf, nachdem wir das Objekt erstellt haben, und zu diesem Zeitpunkt müssen wir die Methode in der Klasse aufrufen, um das Objekt zu erstellen. Die Lösung für eine Methode, die unabhängig davon aufgerufen werden kann, ob das Objekt erstellt wird, besteht zweifellos darin, das Schlüsselwort --static
Schritt 3: Definieren Sie eine gekapselte statische Variable private static $instance
Grund: Fügen Sie das eindeutige Objekt in diese Variable ein und speichern Sie es
. Wenn Sie den „Klonoperator“ verwenden, wird ein neues Objekt geklont, das genau dem aktuellen Objekt entspricht. Zu diesem Zeitpunkt ruft das neue Objekt automatisch die magische Methode in der Klasse auf: _ _c l o n e (); solange es diese Methode gibt;
Code-Demo
<?php class Sing { //第三步:定义一个变量 private static $instance= null; //第一步:封装构造函数 private function __construct(){ } //第二步:使用类名调用这个类创建对象实例 static function getSingle(){ if( !(self::$instance instanceof self) ){ //instanceof判断一个对象是否是某个类的实例 self::$instance = new self(); //用变量来存储实例化出来的对象 } return self::$instance; } //第四步:禁止克隆实例化出来的对象 private function __clone(){ } } $danli = Sing::getSingle(); var_dump($danli); //输出 object(Sing)#1 (0) { } $danli2 = Sing::getSingle(); var_dump($danli2); //输出 object(Sing)#1 (0) { } $obj3 = clone $danli; //此处禁止克隆单例对象实例 var_dump($obj3); //Call to private Sing::__clone() from context '' in 错误行号 ?>