Heim > Artikel > Backend-Entwicklung > Lernen Sie Designmuster
Designmuster sind nur etwas für Java-Architekten – zumindest haben Sie das immer gedacht. Tatsächlich sind Designmuster für jeden nützlich. Wenn diese Werkzeuge nicht den „Architekturastronauten“ vorbehalten sind, was sind sie dann? Warum sie in PHP-Anwendungen nützlich sind.
Heute lernen wir gemeinsam das Singleton-Muster:
Um ein Muster zu lernen, müssen wir die Anwendungsszenarien kennen. Andernfalls wäre es, als würde man eine Kampfsportart erlernen. Wenn man nicht weiß, unter welchen Umständen man sie anwenden soll, wäre das nicht eine Zeitverschwendung?
Eine der häufigsten Anwendungen im Singleton-Modus ist die Datenbankverbindung. Wenn bei jedem Aufruf einer Webseite ein Link erstellt wird, ist dieser Verbrauch eine enorme Verschwendung. Daher müssen wir den Singleton-Modus verwenden, um sicherzustellen, dass das System nur bei Bedarf neue Verbindungen aufbaut.
Wenn Sie Pseudocode zur Beschreibung des Singleton-Musters verwenden, können Sie es wie folgt schreiben:
if(Verbindung existiert){
Zurück zu diesem Link
} anders{
Erstellen Sie einen neuen Link
} }
Bei dieser Implementierung gibt es jedoch offensichtlich ein Problem. Wie kann dieser Link so gespeichert werden, dass er von außen abgerufen werden kann, und gleichzeitig verhindert werden, dass er von der Außenwelt zerstört wird? Wenn dies mit PHP implementiert wird, ist es sehr einfach. Schauen wir uns einen Code an:
<span>//</span><span>get data class</span> <span>class</span><span> DB { </span><span>private</span> <span>$_db</span><span>; </span><span>private</span> <span>static</span> <span>$_instance</span><span>; </span><span>private</span> <span>function</span><span> __construct(){ </span><span>$DSN</span> = '../../content/xxtebook.db'<span>; </span><span>$this</span>->_db = <span>new</span> PDO('sqlite:'.<span>$DSN</span><span>); } </span><span>//</span><span>初始化数据库连接</span> <span>public</span> <span>static</span> <span>function</span><span> initDB(){ </span><span>if</span>(! (self::<span>$_instance</span><span> instanceof self)){ self</span>::<span>$_instance</span> = <span>new</span><span> self(); } </span><span>return</span> self::<span>$_instance</span><span>; } </span><span>//</span><span>其它方法</span> <span> }</span>
Warum sollte der Bauunternehmer privatisiert werden? Das ist eine sehr gute Frage, und jeder ist willkommen, solche Fragen zu stellen.
Als Singleton soll zunächst einmal verhindert werden, dass versehentlich neue Instanzen von außen erstellt werden. Dies kann durch die interne Erstellung von Instanzen sichergestellt werden. Darüber hinaus bieten interne Methoden inhärente Vorteile beim Zugriff auf interne Variablen.
Tatsächlich können wir das Ergebnis der Instanz innerhalb der Klasse speichern, sodass das nächste Mal, wenn die Existenz dieses Werts erkannt wird, dieser herausgenommen und direkt verwendet werden kann, ohne dass er neu erstellt werden muss.
Natürlich habe ich einige Bücher gesehen, die eine leere __clone(){}-Methode erstellen, um das Klonen zu verhindern, was gut ist. Das i-Tüpfelchen überlasse ich konkreten Projekten.
Schauen wir uns abschließend an, wie dieser Singleton verwendet wird:
<span>$db</span> = DB::<span>initDB(); </span><span>//</span><span>$db->somMethod();</span>
Ist es nicht ganz einfach?
Darüber hinaus ist meine Idee, welche Methoden statisch sein sollten und welche nicht verwendet werden sollten, dass, wenn innerhalb der Methode auf die Variable $this zugegriffen wird, die statische Methode nicht verwendet werden sollte und umgekehrt. Mit anderen Worten: Statische Methoden können verwendet werden, ohne Objekte zu instanziieren.
Das nächste Mal werden wir gemeinsam das Fabrikmodell lernen
Das Obige stellt das Lerndesignmuster vor, einschließlich des Inhalts des Designmusters (1). Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.