Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung der Verwendung des PHP-Registrierungsbaummodus

Detaillierte Erläuterung der Verwendung des PHP-Registrierungsbaummodus

php中世界最好的语言
Freigeben: 2023-03-26 21:28:01
Original
2087 Leute haben es durchsucht

Dieses Mal werde ich Ihnen eine detaillierte Erklärung zur Verwendung des PHP-Registrierungsbaummodus geben. Was sind die Vorsichtsmaßnahmen, wenn Sie den PHP-Registrierungsbaummodus verwenden?

Was ist der Registrierungsbaummodus?

Der Registrierungsbaummodus wird natürlich auch Registrierungsmodus und Registrarmodus genannt. Der Grund, warum ich den Namen hier so prätentiös nenne, liegt darin, dass ich der Meinung bin, dass der Namensregistrierungsbaum für die Menschen leichter zu verstehen ist. Wie die beiden vorherigen Artikel beginnt auch unser Artikel mit dem Namen. Das Registrierungsbaummuster ist eine Musterentwurfsmethode, die Objektinstanzen in einem globalen Objektbaum registriert und bei Bedarf aus dem Objektbaum auswählt. Das erinnert mich daran, wie ich als Kind kandierte Kornblumen am Stiel kaufte. Der Verkäufer kandierter Kornblumen klebte die kandierten Kornblumen auf eine große Stange und die Leute nahmen sie ab, wenn sie sie kauften. Der Unterschied besteht darin, dass das Registrierungsbaummodell es nach dem Pflücken immer noch hat und viele Male gepflückt werden kann, aber die kandierten Hagebutten verschwinden, nachdem sie einmal gepflückt wurden. . .

Warum den Registrierungsbaummodus verwenden?

Der Singleton-Modus löst das Problem, wie eine eindeutige Objektinstanz im gesamten Projekt erstellt wird, und der Factory-Modus löst das Problem, wie ein Instanzobjekt erstellt wird, ohne new zu verwenden. Welches Problem möchte der Registrierungsbaummodus also lösen? Bevor wir uns mit diesem Thema befassen, müssen wir noch die Einschränkungen berücksichtigen, mit denen die ersten beiden Modelle derzeit konfrontiert sind. Zunächst muss der Prozess der Erstellung eines eindeutigen Objekts im Singleton-Modus selbst beurteilt werden, d. h. , um zu beurteilen, ob das Objekt existiert . Wenn es existiert, wird das Objekt zurückgegeben; wenn es nicht existiert, wird das Objekt erstellt und zurückgegeben. Jedes Mal, wenn ein Instanzobjekt erstellt wird, muss eine solche Beurteilungsebene vorhanden sein. Das Werksmodell berücksichtigt eher die Frage der erweiterten Wartung. Im Allgemeinen können das Singleton-Muster und das Factory-Muster sinnvollere Objekte erzeugen. Wie kann man diese Objekte bequem aufrufen? Darüber hinaus ähneln die auf diese Weise im Projekt erstellten Objekte verstreuten Soldaten, was die Gesamtverwaltung und -anordnung erschwert. Aus diesem Grund entstand das Registrierungsbaummodell. Unabhängig davon, ob Sie Objekte im Singleton-Modus, im Factory-Modus oder in einer Kombination aus beiden generieren, werden sie alle in den Registrierungsbaum „eingefügt“. Wenn ich ein Objekt verwende, hole ich es einfach direkt aus dem Registrierungsbaum. Dies ist genauso bequem und praktisch wie die Verwendung globaler Variablen. Und auch für andere Muster bietet das Registrierungsbaummuster eine sehr gute Idee.

Wie implementiert man den Registrierungsbaum?

Durch die obige Beschreibung scheinen wir die Lösung leicht gefunden zu haben. Zuerst brauchen wir natürlich eine Klasse als Registrierungsbaum. Alle Objekte werden in den Registrierungsbaum „eingefügt“. Dieser Registrierungsbaum sollte von einer statischen Variablen bedient werden. Und dieser Registrierungsbaum sollte ein zweidimensionales Array sein. Diese Klasse sollte eine Methode zum Einfügen einer Objektinstanz (set()) haben, und entsprechend sollte es eine Methode zum Abbrechen einer Objektinstanz (_unset()) geben. Das Wichtigste ist natürlich, eine Methode zum Lesen des Objekts zu haben (get()). Damit können wir den Registrierungsbaummodus problemlos abschließen~~~

Lassen Sie uns eine kleine Kombination der drei Modi erstellen. Das einfache Erstellen eines Instanzobjekts ist weitaus weniger kompliziert, aber bei der Anwendung auf große Projekte liegt die Bequemlichkeit auf der Hand.

<?php
//创建单例
class Single{
  public $hash;
  static protected $ins=null;
  final protected function construct(){
    $this->hash=rand(1,9999);
  }
  static public function getInstance(){
    if (self::$ins instanceof self) {
      return self::$ins;
    }
    self::$ins=new self();
    return self::$ins;
  }
}
//工厂模式
class RandFactory{
  public static function factory(){
    return Single::getInstance();
  }
}
//注册树
class Register{
  protected static $objects;
  public static function set($alias,$object){
    self::$objects[$alias]=$object;
  }
  public static function get($alias){
    return self::$objects[$alias];
  }
  public static function _unset($alias){
    unset(self::$objects[$alias]);
  }
}
Register::set('rand',RandFactory::factory());
$object=Register::get('rand');
print_r($object);
Nach dem Login kopieren

An diesem Punkt ist die Einführung der drei Designmodi abgeschlossen. Verschiedene Musterdesigns selbst werden sich gegenseitig ergänzen, wenn in Zukunft andere Muster eingeführt werden.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Detaillierte Erläuterung der Schritte zur Implementierung des Algorithmus für mehrere lineare Regressionssimulationskurven in PHP

Anleitung Betreiben Sie PHP, um Besucher-Browsing-Informationen aufzuzeichnen

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des PHP-Registrierungsbaummodus. 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