Heim >
Artikel > PHP-Framework > Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
咔咔Original
2020-12-29 11:31:491666Durchsuche
"
In diesem Artikel wird der Controller als Primer instanziiert und dann der Unterschied zwischen ArrayAccess und der direkten Ausführung von magischem Zugriff zur Rückgabe der Instanz analysiert
"
Vorwort
Oben ein spezielles Detail Es wird eine Erläuterung des Routings gegeben, das ebenfalls mit der Initialisierung und Analyse der Anwendung beginnt, bis die Routenplanung zur Routenerkennung zurückkehrt.
Der durch die Routenerkennung erhaltene Wert ist wie unten dargestellt. Dies ist der Wert, der schließlich von der Routenplanung zurückgegeben wird.
Die verwendeten Routing-Regeln sind Route::get('hello/:name', 'index/index/:name');
Wie Sie auf dem Bild oben sehen können, werden wichtige Daten im Versand gespeichert. Als nächstes wird der Controller im Detail erläutert.
Das erste, was erklärt werden muss, ist der Vorgang des Instanziierungscontrollers, der nach Abschluss der Routenerkennung ausgeführt wird.
1. Instanziierungscontroller
Werfen wir zunächst einen Blick darauf, wie der Instanziierungscontroller ausgeführt wird!
Es besteht kein Zweifel, dass der Code zuerst aus der Eintragsdatei ausgeführt werden muss. Hier wird der Container verwendet, um eine Instanz von App zurückzugeben, und dann wird die Ausführungsmethode in der App-Klasse aufgerufen.
kommt zur Ausführungsanwendung. Bei dieser Methode ist es auch die Route, die gerade oben analysiert wurde.
Nachdem die Erkennungsroute ausgeführt wurde, wird der instanziierte Controller ausgeführt.
Nachdem die Routing-Erkennung abgeschlossen ist, wird Folgendes zurückgegeben: thinkroutedispatchModule Object这个类,并且这个类赋值给了变量$dispatch
Sehen Sie sich dann den Code dieser Methode an In diesem Kurzcode werden immer noch Abschlüsse verwendet. Wenn Sie sich über das Konzept der Abschlüsse nicht im Klaren sind, müssen Sie zu den Grundlagen zurückkehren.
Der im Bild oben eingekreiste Ort ist $dispatch->run()Dieser Code wird als nächstes analysiert. $dispatch->run()这块代码,接下来就要对这块代码进行解析了。
Nachdem Sie den endgültigen Rückgabewert der Route überprüft haben, können Sie feststellen, dass diese Methode tatsächlich in thinkroutedispatchModule in dieser Klasse. 🎜🎜Dann müssen wir die Ausführungsmethode in dieser Klasse analysieren, die darin besteht, die Routing-Planung durchzuführen. 🎜🎜Bei dieser Methode werden weder Routing-Parameter abgerufen noch Routing-Erkennungen noch eine automatische Datenüberprüfung durchgeführt (die oben angegebene Routing-Adresse dient als Beispiel). 🎜
🎜 🎜🎜Routing-Planung ausführen🎜🎜🎜Also wird es gemäß dem obigen Code ausgeführt, um $data = $this->exec();here. 🎜
Die Verfolgung dieser Methode führt zur Existenz einer abstrakten Klasse im Bild unten. Was Sie hier wissen müssen, ist die abstrakte Klasse.
Erklärung abstrakter Klassen
Abstrakte Klassen können nicht instanziiert werden
Klassen mit abstrakten Methoden müssen abstrakte Klassen sein; Klassen müssen mit abstrakten Klassen dekoriert sein
Abstrakt Methoden können keinen Funktionskörper haben. Das heißt, abstrakte Funktionen fun(); Alle abstrakten Methoden
Abstrakte Unterklassen erben abstrakte Klassen, ohne die abstrakten Methoden der übergeordneten Klassen zu erben
Gemäß dem Prinzip des Bildes oben können Sie sehenDiese Klasse ist eine abstrakte Klasse.
Es wird also zwei Situationen geben: Die abstrakte Klasse erbt die abstrakte Klasse, ohne die abstrakte Methode der übergeordneten Klasse zu erben. Das andere ist, dass eine nicht abstrakte Unterklasse eine abstrakte Klasse erbt und die Unterklasse alle abstrakten Methoden der übergeordneten Klasse implementieren muss.
So finden Sie heraus, wer Dispatch geerbt hat
Zu diesem Zeitpunkt haben Sie eine Frage dazu, wie Sie die Unterklasse von Dispatch finden.
Auf diesem Bild sehen Sie diese Versandart, es gibt aber auch ein Versandverzeichnis.
Anhand der von der Routenerkennung zurückgegebenen Daten können Sie leicht erkennen, dass es sich um thinkphp/library/think/route/dispatch/Module.phpDiese Klasse. thinkphp/library/think/route/dispatch/Module.php这个类。
🎜🎜🎜 Auf der Suche nach Unterklassen 🎜🎜🎜 kommt zu exec-Methode. 🎜
Dann besteht die nächste Aufgabe darin, diese Methode ausführlich zu erklären.
Schauen Sie sich zuerst die erste Codezeile an$this->app['hook']->listen('module_init');, hier wird der Container ArrayAccess verwendet, um auf das Objekt in Form eines Arrays zuzugreifen und dann die Magie ausführen Die Methode __get führt die make-Methode aus, wenn auf eine nicht vorhandene Eigenschaft zugegriffen wird. $this->app['hook']->listen('module_init');,在这里使用了容器ArrayAccess用数组的形式访问对象,然后执行的魔术方法__get,当访问不存在的属性时会去执行make方法。
Verwenden Sie den Editor, um diese App zu verfolgen, und Sie werden Folgendes sehen: Wenn Sie dann zur App-Klasse kommen, können Sie sehen, dass sie von der Container-Klasse geerbt wird. 🎜
Ich habe über diesen Wissenspunkt im Zusammenhang mit Containern mehr als einmal gesprochen. Um auf nicht vorhandene Eigenschaften zuzugreifen, gehen Sie zurück und führen Sie die magische Methode __get des Containers aus.
Die Instanz des Hooks zurückgeben
Hören Sie sich das Verhalten des Tags an
Das obige ist der detaillierte Inhalt vonDenken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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