Was ist ein PHP-Singleton-Muster? Detaillierte Erläuterung der Verwendung des Singleton-Modus

伊谢尔伦
Freigeben: 2023-03-12 13:44:02
Original
3538 Leute haben es durchsucht

Dieser Artikel geht vom Konzept des Designmusters aus und beschreibt das Singleton-Muster im PHP-Designmuster. Es handelt sich um einige Grundkenntnisse, die Anfängern die Möglichkeit geben, sich zu verbessern.

Diese Artikelserie fasst die Anwendung von Designmustern in PHP zusammen. Dies ist der erste Artikel über das Singleton-Muster von Erstellungsmustern.

1. Einführung in Designmuster
Lassen Sie uns zunächst wissen, Was ein Designmuster ist:
Ein Designmuster ist eine Menge von Mustern, die wiederholt verwendet werden und einfach zu verwenden sind. Eine Zusammenfassung der Code-Design-Erfahrung, die für andere verständlich und zuverlässig ist.
Designmuster sind kein Patent von Java. Wir können 23 Designmuster auch gut in PHP mit objektorientierten Methoden verwenden.
Welche Beziehung besteht also zwischen der Architektur, dem Framework und den Designmustern, über die wir oft sprechen?
Architektur ist eine Reihe von Systemstrukturen und die Gesamtlösung für das Projekt; halbfertige Software, die wiederverwendet werden kann und spezifischer Programmcode ist. Architektur beinhaltet im Allgemeinen, welche Art von Framework verwendet werden soll, um die Lösung bestimmter Probleme zu beschleunigen und zu optimieren, und gute Framework-Codes nutzen viele Entwurfsmuster sinnvoll.

2. Verfeinerung mehrerer Prinzipien von Entwurfsmustern:

Öffnungs- und Schließprinzip: Module sollten für Erweiterungen offen und für Änderungen geschlossen sein.
Liskov-Substitutionsprinzip: Wenn die übergeordnete Klasse aufgerufen wird, kann sie ausgeführt werden, wenn sie durch eine Unterklasse ersetzt wird.
Prinzip der Abhängigkeitsumkehr: Die Abstraktion hängt nicht von Details ab, schnittstellenorientierte Programmierung und übergebene Parameter versuchen, auf Klassen auf hoher Ebene zu verweisen.
Prinzip der Schnittstellenisolation: Jede Schnittstelle ist nur für eine Rolle verantwortlich.
Prinzip der Wiederverwendung von Zusammensetzung/Aggregation: Verwenden Sie Zusammensetzung/Aggregation so weit wie möglich und missbrauchen Sie die Vererbung nicht.

3. Welche Funktionen haben Designmuster?

Entwurfsmuster können das Problem lösen
Ersetzen Sie unordentlichen Code und bilden Sie einen guten Codestil
Der Code ist leicht zu lesen und kann von Ingenieuren leicht verstanden werden
Beim Hinzufügen neuer Funktionen gibt es Die Schnittstelle muss nicht geändert werden und ist erweiterbar.
Gute Stabilität, im Allgemeinen treten keine unbekannten Probleme auf
Entwurfsmuster können nicht gelöst werden:
Entwurfsmuster sind Vorlagen, die zum Organisieren Ihres Codes verwendet werden, und keine Bibliotheken, die werden direkt aufgerufen;
Entwurfsmuster sind nicht die effizientesten, aber Lesbarkeit und Wartbarkeit des Codes sind wichtiger.
Verfolgen und wenden Sie Entwurfsmuster nicht blind an, sondern berücksichtigen Sie mehr beim Refactoring. Klassifizierung von Entwurfsmustern

1, Erstellungsmuster:

Singleton-Muster, Fabrikmuster (einfache Fabrik, Fabrikmethode, abstrakte Fabrik), Erstellermuster, Prototypmuster.
2. Strukturmodus:

Adaptermodus
, Bridge-Modus, Dekorationsmodus, Kombinationsmodus, Erscheinungsmodus, Fliegengewichtsmodus, Proxy-Modus. 3. Verhaltensmuster: Vorlagenmethodenmuster, Befehlsmuster,
Iteratormuster
, Beobachtermuster, Mediatormuster, Memomuster, Interpretermodus , Zustandsmodus, Strategiemodus, Verantwortungskettenmodus, Besuchermodus. 5. Erstellungsentwurfsmuster 1. Singleton-Muster
Zweck: Sicherstellen, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt für den Zugriff bereitstellen.
Anwendungsszenarien: Datenbankverbindung, Cache-Betrieb, verteilter Speicher.

Der Code lautet wie folgt:


Besonderer Hinweis: Es gibt eine if-Beurteilung in getInstance und dann wird das Objekt in Multi generiert. Bei Thread-Sprachen wird es Probleme mit der Parallelität geben. Beispielsweise gibt es in Java zwei Lösungen: Fügen Sie der Methode das synchronisierte Schlüsselwort hinzu, oder setzen Sie die Initialisierung von _instanc im Voraus, wenn die Klassenmitgliedsvariable definiert ist. PHP unterstützt diese beiden Methoden jedoch nicht. Da PHP jedoch kein Multithreading unterstützt, besteht keine Notwendigkeit, dieses Problem zu berücksichtigen.
     /**
     * 单例模式
     */
class DbConn
{
       private static $_instance = null;
       protected static $_counter = 0;
       protected $_db;
       //私有化构造函数,不允许外部创建实例
       private function construct()
       {
              self::$_counter += 1;
       }
       public function getInstance()
       {
              if (self::$_instance == null)
              {
                     self::$_instance = new DbConn();
              }
              return self::$_instance;
       }
       public function connect()
       {
              echo "connected: ".(self::$_counter)."n";
              return $this->_db;
       }
}
/*
 * 不使用单例模式时,删除构造函数的private后再测试,第二次调用构造函数后,_counter变成2
*/
// $conn = new DbConn();
// $conn->connect();
// $conn = new DbConn();
// $conn->connect();
//使用单例模式后不能直接new对象,必须调用getInstance获取
$conn = DbConn::getInstance();
$db = $conn->connect();
//第二次调用是同一个实例,_counter还是1
$conn = DbConn::getInstance();
$db = $conn->connect();
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas ist ein PHP-Singleton-Muster? Detaillierte Erläuterung der Verwendung des Singleton-Modus. 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