国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial API-Entwicklung Teil 3: PHP-Entwurfsmuster: Das perfekte Singleton-Muster

API-Entwicklung Teil 3: PHP-Entwurfsmuster: Das perfekte Singleton-Muster

Aug 08, 2016 am 09:30 AM
function self static

Lassen 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.

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

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Warum NameResolutionError(self.host, self, e) von e und wie man es l?st Warum NameResolutionError(self.host, self, e) von e und wie man es l?st Mar 01, 2024 pm 01:20 PM

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

Was bedeutet Funktion? Was bedeutet Funktion? Aug 04, 2023 am 10:33 AM

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.

So verwenden Sie self in Python So verwenden Sie self in Python May 17, 2023 pm 10:40 PM

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 Detaillierte Erl?uterung der Rolle und Funktion der MySQL.proc-Tabelle Mar 16, 2024 am 09:03 AM

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

Was ist der Zweck der Funktion ?enumerate()' in Python? Was ist der Zweck der Funktion ?enumerate()' in Python? Sep 01, 2023 am 11:29 AM

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

Welche Funktion und Verwendung hat Static in der C-Sprache? Welche Funktion und Verwendung hat Static in der C-Sprache? Jan 31, 2024 pm 01:59 PM

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.

So verwenden Sie SOA-Funktionen in PHP So verwenden Sie SOA-Funktionen in PHP May 18, 2023 pm 01:10 PM

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.

Funktion ?clearstatcache()' in PHP Funktion ?clearstatcache()' in PHP Sep 07, 2023 am 09:33 AM

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(

See all articles