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-04 12:49:35139Durchsuche
"

In diesem Artikel wird die Instanziierung des Controllers vorgestellt und anschließend der Unterschied zwischen ArrayAccess und der direkten Ausführung von magischem Zugriff zur Rückgabe der Instanz analysiert

"

Vorwort

Im Im obigen Artikel wird das Routing besprochen. Die spezielle detaillierte Erklärung beginnt auch bei der Anwendungsinitialisierung und -analyse, 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');

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Gedruckter Ort
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Das Ergebnis der Routing-Erkennung

Wie Sie auf dem Bild oben sehen können, werden wichtige Daten in Dispatchc gespeichert und dann erfolgt die Steuerung Das Gerät wird ausführlich erklärt.

Das erste, was erklärt werden muss, ist der Vorgang des Instanziierungscontrollers, der nach Abschluss der Routenerkennung ausgeführt wird.

1. Instanziierungscontroller

Schauen wir uns zunächst an, 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.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Eingabedatei

kommt zur Ausführungsanwendung. Bei dieser Methode wird auch die gerade oben analysierte Route verwendet.

Nachdem die Erkennungsroute ausgeführt wurde, wird der instanziierte Controller ausgeführt.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Führen Sie die Anwendung aus

Nach Abschluss der Routing-Erkennung erfolgt die Rückkehr thinkroutedispatchModule Object这个类,并且这个类赋值给了变量$dispatch

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Routing-Erkennung

Dann schauen Sie sich diesen Code dieser Methode an. Hier wird Middleware verwendet. Hier ist die Kurzfassung Code-Abschlüsse werden immer noch verwendet. Wenn Sie sich über das Konzept der Abschlüsse nicht im Klaren sind, müssen Sie zu den Grundlagen zurückkehren.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Middleware

Der im Bild oben eingekreiste Ort ist $dispatch->run()Dieser Code wird als nächstes analysiert. $dispatch->run()这块代码,接下来就要对这块代码进行解析了。

在检测路由最终的返回值可以知道其实这个方法是在thinkroutedispatchModule这个类中。

接着就需要对这个类中的run方法进行解析了,这个方法也就是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
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach

所以根据上图代码就会执行到$data = $this->exec();

Nachdem Sie den endgültigen Rückgabewert der Route ermittelt haben, können Sie wissen, 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.
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nachBei 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).
Routenplanung ausführen
Routing-Planung ausführen

Der Code wird also gemäß dem obigen Code ausgeführt: $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. 🎜🎜🎜🎜Abstrakte Klasse🎜🎜🎜🎜Erklärung der abstrakten Klasse🎜🎜
  • Abstrakte Klassen können nicht instanziiert werden
  • Eine Klasse mit abstrakten Methoden muss eine abstrakte Klasse sein; die Klasse muss abstrakt modifiziert sein
  • Abstrakte Methoden dürfen keinen Funktionskörper haben;
  • Nicht abstrakte Methoden in abstrakten Klassen können von Unterklassen aufgerufen werden
  • Nicht abstrakte Unterklassen erben abstrakte Klassen, und Unterklassen müssen alle abstrakten Methoden der übergeordneten Klasse implementieren.
  • Abstrakte Unterklassen erben abstrakte Klassen, ohne zu erben Die abstrakte Methode

aus der übergeordneten Klasse kann nach dem Prinzip des obigen Bildes gesehen werdenDispatchDiese Klasse ist eine abstrakte Klasse. Dispatch这个类是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继承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,子类必须实现父类的所有抽象方法。

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

怎么去找谁继承了Dispatch

这个时候是不是有一个疑问就是怎么去找Dispatch的子类。

在这个图中可以看到本类Dispatch,但是还有一个dispatch这个目录。

根据Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach返回的数据可以轻而易举的就知道是thinkphp/library/think/route/dispatch/Module.php

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. 🎜
Abstrakte Klasse
🎜So finden Sie es Wer erbt Dispatch🎜🎜Zu diesem Zeitpunkt stellt sich die Frage, wie man die Unterklasse von Dispatch findet. 🎜🎜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. 🎜
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Auf der Suche nach Unterkategorien

kam zu thinkphp/ Library/think/route/dispatch/Module.phpViewexec-Methode. thinkphp/library/think/route/dispatch/Module.php查看exec方法。

那么接下来的任务就是对这个方法进行深入的解读了。

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

先看第一行代码$this->app['hook']->listen('module_init');,在这里使用了容器ArrayAccess用数组的形式访问对象,然后执行的Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach__get,当访问不存在的属性时会去执行make方法。

使用编辑器追踪这个app会到thinkphp/library/think/route/Dispatch.php

Dann besteht die nächste Aufgabe darin, diese Methode ausführlich zu erklären.
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nachinstantiierter Controller
Instanziieren Sie den Controller

Schauen Sie sich zuerst die erste Codezeile an$this->app['hook']->listen('module_init');, hier verwendet der Container ArrayAccess ein Array Access the Objekt im Formular und führen Sie dann die magische Methode __get aus. Beim Zugriff auf ein nicht vorhandenes Attribut wird die make-Methode ausgeführt.

🎜Verwenden Sie den Editor, um diese App zu verfolgen, und Sie gelangen zu Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Geerbte Klassen

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.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Die magische Methode wird ausgeführt, wenn auf nicht vorhandene Eigenschaften zugegriffen wird.

Daher werden die Parameter dieses Blocks an den Hook übergeben und die Instanz des Hooks zurückgegeben. Wie diese Instanz zurückgegeben wird, wird erläutert Der Abschnitt über Container ist ausführlich, Sie können einen Blick darauf werfen!

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Die Instanz des Hooks zurückgeben

Dann wird die Listen-Methode des Hooks ausgeführt, um das Verhalten des Tags zu überwachen.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Hören Sie sich das Verhalten des Tags an

Zu diesem Zeitpunkt können Sie zur Definitionsdatei für die Anwendungsverhaltenserweiterung gelangen. Sie können sehen, dass dieser Parameter für das Modul initialisiert ist, dieser Wert jedoch leer ist.

Da es im obigen Bild nicht ausgeführt wird, geben Sie für einen einfachen Test den Anwendungsinitialisierungswert in diesen Parameter ein.

Diese Klasse ist der Ausführungs-Hook, der die Fassadenklasse optimiert.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Wenden Sie die Verhaltenserweiterungsdefinitionsdatei an

Dann wird der Code ausgeführt, um$results[$key] = $this->execTag($name, $tag, $params);Hier. $results[$key] = $this->execTag($name, $tag, $params);这里来。

参数说明

  • $name = string(22) "behaviorLoadBehavior"
  • $tag = module_init

接着通过正则对传过来的参数进行处理,最终返回moduleInit

然后通过$obj = Container::get($class);返回behaviorLoadBehavior的实例

最终通过is_callable这个函数进行验证,检测类里边的方法是否可以被调用,方法数组格式,这个方法后期咔咔单独写一篇文章作为对象来解析,这里只需要知道会返回false即可。

然后会把本类的$portal这个值赋值给$method,这个值就是run。

最后通过$result = $this->app->invoke($call, [$params]);

Parameterbeschreibung

    $name = string(22) "behaviorLoadBehavior"
  • $tag = module_init
Dann werden die übergebenen Parameter durch reguläre Ausdrücke verarbeitet und schließlich wird moduleInit zurückgegeben

Dann durch $obj = Container::get($class);Gibt die Instanz von behaviorLoadBehavior zurück

Finally bestandenis_callableDiese Funktion überprüft, ob die Methode in der Klasse aufgerufen werden kann. Methodenarray Format, nach dieser Methode schreibt Kaka einen separaten Artikel als zu analysierendes Objekt. Hier müssen Sie nur wissen, dass false zurückgegeben wird. 🎜🎜Dann wird der $portalDieser Wert ist zugewiesen aninvoke($call, [$params]);Diese Codezeile, die unterste Ausführung dieser Codezeile, wird durch den Reflexionsmechanismus implementiert. 🎜🎜Der letzte Code gibt NULL zurück. 🎜🎜🎜Instanziierter Controller🎜🎜

Der nächste Schritt besteht darin, den Controller zu instanziieren. Die aufrufende Methode ist $this->app->controller()

这里需要注意的是list这个函数,这个函数的后边会返回一个数组,然后list中的俩个变量会分别为索引0和1。

判断也会去执行第一个,同样会执行到容器类的make方法,这个方法会直接返回appindexcontrollerIndex

Was hier beachtet werden muss, ist die Listenfunktion. Nach dieser Funktion wird ein Array zurückgegeben, und dann werden die beiden Variablen in der Liste zurückgegeben Index 0 und 1.
实例化(分层)控制器 格式:[模块名/]控制器名Das Urteil führt auch das erste aus und führt auch die make-Methode der Containerklasse aus. Diese Methode gibt direkt appindexcontrollerIndexInstanz dieser Klasse.

Instantiierung (geschichtetes) Controller-Format: [Modulname/] Controller-Name 2. In Bezug auf den Unterschied zwischen ArrayAccess und der direkten Ausführung von magischem Zugriff auf Rückgabeinstanzen

Einige Freunde Habe es bereits gelernt die Verwendung von ArrayAccess und der magischen Methode __get.

Es wird geschätzt, dass einige von ihnen an diesen beiden Stellen nicht eindeutig sind. Kaka wird diese beiden zusammenfügen und analysieren.

Lass uns zuerst über die Verwendung von ArrayAccess sprechen

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nachDieser Fall wurde Ihnen bereits demonstriert, hauptsächlich zur Implementierung der ArrayAccess-Klasse.

Dies ist eine zuvor geschriebene Testmethode

Wenn Sie dann zum Controller kommen, um ihn zu verwenden, instanziieren Sie ihn zuerst. Der zuvor implementierte Fall ist wie folgt. 🎜🎜Aber der Fall, der dieses Mal umgesetzt werden muss, ist nicht der, der im Bild unten umgesetzt wird. 🎜
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Verwenden Sie den Controller

Als nächstes verwenden Sie die in der Abbildung unten gezeigte Methode, um über ein Array direkt auf die Objekteigenschaften zuzugreifen.

Im Bild oben sehen Sie, dass ein Attributtitel auf kaka gesetzt ist. In diesem Fall kann er direkt in Form eines Arrays abgerufen werden.

Beachten Sie, dass das Rückgabeergebnis Kaka ist, was bedeutet, dass auf die Eigenschaften des Objekts direkt in Array-Form zugegriffen wird.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Neuer Zugriffszugriff
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Ergebnisse drucken

Zusammenfassung

Im Implementierungsprozess des ersten Falls wurde ein Schritt ignoriert, nämlich die Verwendung des Objekts, um direkt auf die Eigenschaften des Objekts zuzugreifen in Form eines Arrays.

Was Sie sehen können, können Sie direkt erhalten. Lassen Sie uns diese Idee in den Rahmen einbauen und einen Blick darauf werfen.

Framework-Praxisfall

Der folgende Code existiert in der im vorherigen Artikel analysierten Route.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Routing-Klasse

Werfen wir zunächst einen Blick auf den Wert dieser App im gedruckten Zustand: thinkApp Objectobject. thinkApp Object对象。

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

thinkApp Object这个对象去访问request时,因为app属性就没有这个request

gedruckter App-WertDenken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
when thinkApp Object
Zugriff auf dieses Objektrequest, da das app-Attribut diesen request, und weil die App-Klasse die Containerklasse erbt, Es wird also zur Containerklasse weitergeleitet, um die unten gezeigte Methode auszuführen. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p> <figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;">Führen Sie diese Methode aus<img src="https://img-blog.csdnimg.cn/20201110175525789.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" alt="Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach返回实例对象" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;"></figcaption>Dann wird die __get-Methode ausgeführt und die make-Methode wird ausgeführt, um die entsprechende Instanz zurückzugeben. </figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>🎜Führen Sie diese Methode aus, um das Instanzobjekt zurückzugeben. 🎜🎜🎜Wenn Sie zu diesem Zeitpunkt noch Fragen haben, warum wird sie einfach ausgeführt, wenn sie angibt, dass sie ausgeführt wird? 🎜<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Als nächstes führt Kaka Sie durch einen einfachen Test, um das herauszufinden. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Drucken Sie an dieser Position einen zufälligen Wert. </p> <figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"><img src="https://img-blog.csdnimg.cn/20201110175721860.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" alt="Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Testfall</figcaption></figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Gehen Sie dann zur offsetGet-Methode von ArrayAccess der Containerklasse und drucken Sie den übergebenen Wert aus. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Schauen Sie sich die gedruckten Ergebnisse an und es wird sehr klar sein. </p> <figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"><img src="https://img-blog.csdnimg.cn/20201110175833546.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" alt="Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Hier Bildbeschreibung einfügen</figcaption></figure><figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"><img src="https://img-blog.csdnimg.cn/2020111017585854.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" alt="Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Ergebnisse drucken</figcaption></figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Die Verwendung von ArrayAccess endet hier. Als nächstes wird der Inhalt des Containers erläutert Detail, um zu sehen, unter welchen Umständen die __get-Methode ausgeführt wird. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"><span style="font-weight: 700; color: rgb(248, 57, 41);">__Detaillierte Erklärung der Methode erhalten</span></p> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Für diesen Fall sehen Sie sich bitte das Bild unten an<code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba(27,31,35,.05); font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(271, 93, 108);">$this->hook.

Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Initialisieren Sie die Anwendung

Aus dem gleichen Grund debuggen wir dies zuerstWas ist der Wert von $this. $this是什么值。

打印这个值都没什么必要,因为就是在本类中。

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

在类中属性的访问应该都会,就是直接使用$this-> 即可。

所以说当系统访问$this->hook

Dieser Wert muss nicht gedruckt werden, da er in dieser Klasse liegt.
Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Ergebnisse drucken

Attribute in der Klasse Der Zugriff sollte einfach sein, verwenden Sie einfach $this-> reicht aus.

Wenn das System also auf $this->hook Da die App-Klasse zu diesem Zeitpunkt nicht über das Hook-Attribut verfügt, wird die magische Methode der Containerklasse ausgeführt. Denken Sie bei PHP über den Unterschied zwischen ArrayAccess und der Direct Magic Access Return-Instanz nach
Magische Methode

Führen Sie dann die make-Methode aus, um eine Instanz der Klasse zu erstellen.

🎜🎜🎜 Erstellen Sie eine Instanz einer Klasse 🎜🎜🎜🎜 Zusammenfassung 🎜🎜

Also verwenden wir die magischen Methoden ArrayAccess und __get, und letztendlich gibt die ausgeführte make-Methode eine Instanz der Klasse zurück.

Wenn Sie auf this->config stoßen, wird die __get-Methode des Containers ausgeführt.

Wenn app['request'] auftritt, wird ArrayAccess ausgeführt und dann wird offsetGet ausgeführt.

  • __get gilt für die Attribute der Klasse. Wenn die Attribute der Klasse nicht vorhanden sind, wird sie ausgeführt ArrayAccess wird instanziiert. Wenn auf die Klasse als Array zugegriffen wird, wird diese Methode ausgeführt, wenn sie nicht vorhanden ist.

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!

Stellungnahme:
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