


API-Entwicklung Teil 3: PHP-Entwurfsmuster: Das perfekte Singleton-Muster
Aug 08, 2016 am 09:30 AMLassen Sie uns heute über das Singleton-Muster sprechen.
Da ich früher Java-Entwicklung gemacht habe, dachte ich bei der Verwendung des Singleton-Modus zuerst daran, den hungrigen chinesischen Stil zu verwenden, und dann stellte ich fest, dass es in PHP eine solche Funktion gibt: weil PHP die Zuweisung von Nicht-Basistyp--Werten zu Mitgliedsvariablen einer Klasse w?hrend der Klassendefinition nicht unterstützt. Wie Ausdrücke, neue Operationen usw. Der hungrige chinesische Stil wird also nicht funktionieren. Stattdessen wollte ich die Atomizit?t dieses Singleton-Modus sicherstellen und stellte fest, dass es in PHP keine Thread-Sicherheitsprobleme wie in JAVA gibt. Hey, denkst du, PHP ist gut? OK, dann probieren wir den Lazy-Singleton-Modus von PHP aus.
Lassen Sie mich nicht zuerst darüber sprechen, sondern meine erste Version des Singleton-Modus-Codes vorstellen:
// 定義私有靜態(tài)變量.此種方式為:懶漢式單例(PHP中只有這種方式) private static $instance = null; // 私有化構(gòu)成方法 private function __construct(){ } // 提供獲取實例的公共方法 public static function getInstance(){ if(!(self::$instance instanceof self)){ self::$instance = new self(); } return self::$instance; } // 私有__clone方法,禁止復(fù)制對象 private function __clone(){ }OK, das Der Code sieht perfekt aus, mit Kommentaren und Formatierungen, sodass es keine Probleme gibt. Aber als ich es benutzte, entdeckte ich ein Problem
Meine Klasse A befindet sich im Singleton-Modus, und dann erbt meine Klasse B von Klasse A, und dann rufe ich die folgende Methode auf:
$a = A::getInstance(); $b = B::getInstance(); var_dump($a === $b);Das Ausgabeergebnis ist: bool(true)
Was bedeutet dieses Ausgabeergebnis? Das hei?t: Nachdem B von A geerbt hat, besteht meine ursprüngliche Absicht darin, dass B auch ein Singleton-Modus wird. Dann erben und verwalten nur A und B, und ihre Objekte sollten nicht gleich sein. was nur bedeuten kann: Das durch
$b = B::getInstance();erhaltene Objekt ist immer noch ein Objekt der Klasse A. Was ist also los?
Das Problem liegt beim Selbst. Der Selbstbezug wird bei der Definition der Klasse bestimmt. Das hei?t, wenn A B erbt, zeigt sein Selbstbezug immer noch auf A. Um dieses Problem zu l?sen, wurde in PHP 5.3 die sp?te statische Bindungsfunktion eingeführt. Einfach ausgedrückt erfolgt der Zugriff auf statische Methoden oder Variablen über das Schlüsselwort static. Im Gegensatz zu self werden statische Referenzen zur Laufzeit ermittelt. Also schreiben wir einfach unseren Code um, damit der Singleton-Modus wiederverwendet werden kann.
class C { protected static $_instance = null; protected function __construct(){ } protected function __clone(){ } public function getInstance(){ if (static::$_instance === null) { static::$_instance = new static; } return static::$_instance; } } class D extends C{ protected static $_instance = null; } $c = C::getInstance(); $d = D::getInstance(); var_dump($c === $d);Die Ausgabe zu diesem Zeitpunkt lautet: bool(false)
Dann k?nnen Sie dies erreichen, solange Sie diesen Singleton-Modus erben, dann befinden sich auch seine Unterklassen im Singleton-Modus. Dadurch kann eine perfekte Wiederverwendung erreicht werden, ohne jedes Mal, wenn Sie den Singleton-Modus ben?tigen, so viel wiederholten Code schreiben zu müssen. Beachten Sie, dass die obige Methode nur in PHP 5.3 verwendet werden kann. Für frühere Versionen von PHP ist es besser, für jede Singleton-Klasse eine getInstance()-Methode zu schreiben.
Das Obige stellt den dritten Teil der API-Entwicklung vor: PHP-Designmuster: Das perfekte Singleton-Muster, einschlie?lich Aspekten des Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Grund für den Fehler ist NameResolutionError(self.host,self,e)frome, ein Ausnahmetyp in der urllib3-Bibliothek. Der Grund für diesen Fehler ist, dass die DNS-Aufl?sung fehlgeschlagen ist, d. h. der Hostname oder die IP-Adresse Der L?sungsversuch konnte nicht gefunden werden. Dies kann daran liegen, dass die eingegebene URL-Adresse falsch ist oder der DNS-Server vorübergehend nicht verfügbar ist. So beheben Sie diesen Fehler Es gibt m?glicherweise mehrere M?glichkeiten, diesen Fehler zu beheben: überprüfen Sie, ob die eingegebene URL-Adresse korrekt ist und stellen Sie sicher, dass sie zug?nglich ist. Stellen Sie sicher, dass der DNS-Server verfügbar ist. Sie k?nnen es mit dem Befehl ?ping“ in der Befehlszeile versuchen Um zu testen, ob der DNS-Server verfügbar ist, versuchen Sie, über die IP-Adresse statt über den Hostnamen auf die Website zuzugreifen, wenn Sie sich hinter einem Proxy befinden

Funktion bedeutet Funktion. Es handelt sich um einen wiederverwendbaren Codeblock mit bestimmten Funktionen. Er kann Eingabeparameter akzeptieren, bestimmte Operationen ausführen und Ergebnisse zurückgeben. Code, um die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern.

Bevor wir die Verwendung von self in Python vorstellen, stellen wir zun?chst die Klassen und Instanzen in Python vor. Wir wissen, dass Klassen und Instanzen abstrakte Vorlagen sein k?nnen vertreten durch eine Studentenklasse. Instanzen sind spezifische ?Objekte“, die auf der Grundlage von Klassen erstellt werden. Jedes Objekt erbt dieselben Methoden von der Klasse, seine Daten k?nnen jedoch unterschiedlich sein. 1. Nehmen Sie die Klasse Student als Beispiel. In Python ist die Klasse wie folgt definiert: classStudent(object):pass(Object) gibt an, von welcher Klasse die Klasse erbt

Detaillierte Erl?uterung der Rolle und Funktion der MySQL.proc-Tabelle. MySQL ist ein beliebtes relationales Datenbankverwaltungssystem. Wenn Entwickler MySQL verwenden, müssen sie h?ufig gespeicherte Prozeduren erstellen und verwalten. Die MySQL.proc-Tabelle ist eine sehr wichtige Systemtabelle. Sie speichert Informationen zu allen gespeicherten Prozeduren in der Datenbank, einschlie?lich des Namens, der Definition, der Parameter usw. der gespeicherten Prozeduren. In diesem Artikel erkl?ren wir ausführlich die Rolle und Funktionalit?t der MySQL.proc-Tabelle

In diesem Artikel lernen wir die Funktion enumerate() und den Zweck der Funktion ?enumerate()“ in Python kennen. Was ist die Funktion enumerate()? Die Funktion enumerate() von Python akzeptiert eine Datensammlung als Parameter und gibt ein Aufz?hlungsobjekt zurück. Aufz?hlungsobjekte werden als Schlüssel-Wert-Paare zurückgegeben. Der Schlüssel ist der Index, der jedem Element entspricht, und der Wert sind die Elemente. Syntax enumerate(iterable,start) Parameter iterable – Die übergebene Datensammlung kann als Aufz?hlungsobjekt namens iterablestart zurückgegeben werden – Wie der Name schon sagt, wird der Startindex des Aufz?hlungsobjekts durch start definiert. wenn wir es ignorieren

Die Rolle und Verwendung von Statik in der C-Sprache: 1. Variablenbereich; Wenn das Schlüsselwort static vor einer Variablen steht, ist der Gültigkeitsbereich der Variablen auf die Datei beschr?nkt, in der sie deklariert ist. Mit anderen Worten, die Variable ist ein ?Gültigkeitsbereich auf Dateiebene“, was sehr nützlich ist, um das ? zu verhindern. Problem der doppelten Definition von Variablen; 2. Lebenszyklus, statische Variablen werden einmal initialisiert, wenn die Ausführung des Programms beginnt, und zerst?rt, wenn das Programm endet usw.

Mit der Entwicklung des Internets ist SOA (serviceorientierte Architektur) zu einer wichtigen technischen Architektur in heutigen Systemen auf Unternehmensebene geworden. Dienste in der SOA-Architektur k?nnen wiederverwendet, neu organisiert und erweitert werden und vereinfachen gleichzeitig den Systementwicklungs- und Wartungsprozess. Als weit verbreitete Web-Programmiersprache stellt PHP auch einige Funktionsbibliotheken zur Implementierung von SOA zur Verfügung. Als n?chstes werden wir detailliert beschreiben, wie SOA-Funktionen in PHP verwendet werden. 1. Das Grundkonzept von SOA ist eine verteilte Systementwicklungsidee und -architektur.

Mit der Funktion ?clearstatcache()“ wird der Dateistatus-Cache geleert. PHP speichert die von den folgenden Funktionen zurückgegebenen Informationen zwischen: ?stat()lstat()file_exists()is_writable()is_readable()is_executable()is_file()is_dir()filegroup()fileowner()filesize()filetype()fileperms() Was zu tun Um eine bessere Leistung zu erzielen. Syntax voidclearstatecache() Parameter NA Rückgabewert clearstatcache(
