Heim > PHP-Framework > Denken Sie an PHP > Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

咔咔
Freigeben: 2020-12-04 13:32:40
Original
179 Leute haben es durchsucht

1. Führen Sie die Methode im Controller aus

Die Anforderungsadresse dieses Artikels ist der konfigurierte Domänenname.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Anforderungsadresse

Sie können aus dem Obigen wissenDer Wert von $instance ist appindexcontrollerIndex code> Instanz. <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);">$instance的值就是appindexcontrollerIndex的实例。

这块也是存在中间件的概念,依然如此中间件会在后文中单独提到,这里不做解释。

在这里$this->app['middleware']->controller这段代码的使用,还能记得是使用的ArrayAccess还是直接为__get吗?

这里是在使用访问数组的形式访问对象,所以使用的是ArrayAccess的形式,这俩种概念一定要区分清楚。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

接下来就会执行获取方法名,至于这个方法名怎么获取的是在本类的init方法执行的,这里只需要知道返回的是index

Dies gilt auch für das Konzept der Middleware. Die Middleware wird im folgenden Artikel separat erwähnt und hier nicht erläutert. 🎜🎜Here$this->app['middleware; ]->controller Können Sie sich bei der Verwendung dieses Codes noch erinnern, ob es sich um ArrayAccess oder direkt um __get handelt? 🎜🎜Hier verwenden wir die Form des Array-Zugriffs, um auf das Objekt zuzugreifen, also verwenden wir die Form von ArrayAccess. Die beiden Konzepte müssen klar unterschieden werden. 🎜🎜Methode zur Ausführung des Controllers durch Reflexion🎜Führen Sie die Controller-Methode durch Reflektion aus🎜🎜🎜Dann wird der Methodenname abgerufen. Wie der Methodenname abgerufen wird, befindet sich in dieser Klasse Die init-Methode wird ausgeführt. Sie müssen nur wissen, dass Folgendes zurückgegeben wird: index Das ist es. 🎜

Was Sie hier beachten müssen, ist diese Codezeile$this->rule->getConfig('action_suffix'),这里获取的是Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

假如现在给这个Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?设置一个值会变成什么样子呢!

给添加一个kaka的值,进行访问一下看会是什么结果。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

这个时候进行访问会提示indexkaka的这个方法不存在,是不是清晰可见了,说明这个参数是在为所有的方法名追加一个kaka。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

对获取当前操作名的代码进行扩展完成之后,紧接着就是if (is_callable([$instance, $action])) {,在这里可以看见我们的老朋友is_callable

对于这里的is_callable俩个参数通过上文都知道是什么了,第一个参数为appindexcontrollerIndex的实例,第二个参数为index

Operationsmethodensuffix

Wie würde es aussehen, wenn wir jetzt einen Wert für dieses Operationsmethodensuffix festlegen würden! 🎜🎜Fügen Sie einen Kaka-Wert hinzu und greifen Sie darauf zu, um zu sehen, wie das Ergebnis aussehen wird. 🎜
kaka zum Testen hinzugefügtKaka zum Testen hinzugefügt
🎜Beim Zugriff zu diesem Zeitpunkt wird angezeigt, dass die Indexkaka-Methode nicht vorhanden ist. Ist sie deutlich sichtbar? Erklären Sie dies Der Parameter hängt ein Kaka an alle Methodennamen an. 🎜
Zugriffsergebnisse
🎜Nachdem die Erweiterung des Codes zum Erhalten des aktuellen Operationsnamens abgeschlossen ist, ist der nächste Schritt if (is_callable([$instance, $action])) {, hier können Sie siehe unseren alten Freundis_callable. 🎜🎜Sie kennen die beiden Parameter von is_callable hier aus dem Obigen. Der erste Parameter ist Instanz von appindexcontrollerIndex, der zweite Parameter ist indexFühren Sie die Operationsmethode aus. 🎜

Dann <code style="font" in der klasse appindexcontrollerindex> -size: 14px; Zeilenumbruch: 2px 4px; Hintergrundfarbe: rgba(27,31,35,.05); Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(271, 93, 108);">indexOb der Methodenname ausgeführt werden kann. is_callable的作用就是检测在appindexcontrollerIndex类中的index方法名是否可以执行。

很明显这里会返回一个true,因为在index类里边存在index方法的。

这里在做测试之前一定要把刚刚在app的配置文件中配置的方法名后缀那个给取消掉。

通过这个is_callable判断会存在三种情况,接下来咔咔将会从三个方面给大家进行解析。

第一种情况:类里边存在可执行的方法

  • 首先返回一个 ReflectionMethod 类
  • 获取方法名 index
  • 未设置方法名后缀返回空
  • 设置当前的操作名
  • 在这个案例中没有设置参数,所以最终的$vars
    Natürlich wird hier ein true zurückgegeben, da es in der Indexklasse eine Indexmethode gibt.
Bevor Sie den Test hier durchführen, müssen Sie das soeben in der App-Konfigurationsdatei konfigurierte Methodennamenssuffix löschen.

Damit <img src="https://img-blog.csdnimg.cn/20201111001613166.png" alt="Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?" style="max-width:90%"><span style="font-weight: 700; color: rgb(248, 57, 41);">Die erste Situation: Es gibt eine ausführbare Methode in der Klasse</span><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;"><ul data-tool=" mdnice editor" style="margin-top: 8px; padding-left: 25px; padding-left: 25px;"><li><section style="margin-top: 5px ; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">Zuerst eine ReflectionMethod-Klasse zurückgeben</section></li></ul></figcaption><li><section style="margin-top: 5px; : 5px; line-height: 26px; color: rgb(53, 53, 53);">Get method name index<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p> <li><section style="margin-top: 5px; margin-bottom: 5px; height: 26px; color: rgb(53, 53, 53);">Wenn das Methodennamensuffix nicht festgelegt ist, wird leer zurückgegeben🎜🎜<li><section style="margin-top: 5px; : 5px; line-height: 26px; color: rgb(53, 53, 53);">Legen Sie den aktuellen Operationsnamen fest🎜🎜<li><section style="margin-top: 5px; margin-bottom: 5px; -height: 26px; color : rgb(53, 53, 53);">In diesem Fall sind keine Parameter festgelegt, daher ist der endgültige <code style="font-size: 14px; 2px 4px; Randradius: 0 2px; Hintergrundfarbe: rgba(27,31,35,.05); -all; color: rgb (271, 93, 108);">$vars ist ein leeres Array. 🎜🎜🎜🎜Um diesen Code mit Parametern zu testen, müssen wir eine kleine Änderung an der Routing-Adresse vornehmen. 🎜🎜🎜🎜Teil des Codes testen🎜🎜🎜Ich habe vorher kein Routing verwendet, sondern direkt die Standardadresse verwendet. Diese Routing-Adresse wird als nächstes verwendet
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Verwenden Sie die neue Routing-Adresse zum Testen.

Verwenden Sie diese Routing-Adresse, um die Daten auszudrucken. Sie können sehen, dass es sich um die Routing-Parameter handelt, die wir festgelegt haben.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Datendruck

Diese Methode zum Abrufen von Anforderungsvariablen gibt Folgendes ein: $this->request->param();Diese Codezeile$this->request->param();这行代码

框架是如何获取参数的

访问地址:http://www.source.com/index.php/hello/hello

在上文知道是通过$this->request->param()来获取参数的,那么在框架是如何获取参数的呢!

根据流程代码会执行到下图,根据获取的请求方式来使用对应的方式来获取参数,在这里需要明确的是我们使用的是get请求。

所以代码会执行到$this->param

Wie erhält das Framework Parameter

Zugriffsadresse: http://www.source.com/index.php/hello/hello🎜🎜Wie wir oben wissen, erfolgt dies über $this->request->param(), um die Parameter zu erhalten , Wie erhält man also die Parameter im Framework? 🎜🎜Gemäß dem Prozesscode wird die entsprechende Methode verwendet, um die Parameter gemäß der erhaltenen Anforderungsmethode abzurufen. Hier muss klargestellt werden, dass wir die Get-Anfrage verwenden. 🎜🎜Der Code wird also so ausgeführt: route方法,看到注释就明白是用来Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?的,但是还是需要在进入一层到input。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

在之前路由的那一期文章中在获取到路由参数的时候会把参数合并到request的route属性。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

所以说$this->route就是存放的这条路由规则所有的参数,包含路由参数。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

这时执行流程会执行到获取变量 支持过滤和默认值,在上文中$this->route

Routing-Parameter abrufen🎜Routing-Parameter abrufen🎜🎜🎜Im vorherigen Routing-Artikel werden die Parameter beim Abrufen der Routing-Parameter mit dem Routenattribut der Anforderung zusammengeführt. 🎜🎜Routing-Variablen festlegen🎜Routing-Variablen festlegen🎜🎜🎜So sagen Sie$this->route ist der Ort, an dem alle Parameter dieser Routing-Regel gespeichert werden, einschließlich der Routing-Parameter. 🎜🎜Ergebnisse drucken🎜Ergebnisse drucken🎜🎜🎜Zu diesem Zeitpunkt wird der Ausführungsprozess ausgeführt, um Variablen zu erhalten, die Filterung und Standardwerte unterstützen. Im obigen $this->routeDer übergebene Parameter ist falsch, also wird dieser Block direkt zurückgegeben werden. 🎜
获取变量 支持过滤和默认值
Das Abrufen von Variablen unterstützt Filterung und Standardwerte

Die hier zurückgegebenen Ergebnisse werden an die Stelle zurückgegeben, an der wir oben mit der Analyse begonnen haben, d. h. an diesen $vars sind die erhaltenen Routing-Parameter. $vars就是获取到的路由参数。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

第二种情况:类里边不存在可执行的方法

当第一种判断执行is_callable判断类里边的方法不可执行时,就会执行到第二种情况。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

先来请求的一个没有设置的路由地址,看会返回什么。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

根据代码给的提示,我们来到index控制器建立一个_empty

Zurückgegebene Routing-Parameter-Ergebnisse🎜Zurückgegebene Routing-Parameter-Ergebnisse🎜🎜🎜 Zwei Situationen: Es gibt keine ausführbare Methode in der Klasse🎜🎜Wenn das erste Urteil ausgeführt wirdis_callableWenn festgestellt wird, dass die Methode in der Klasse nicht ausführbar ist, wird die zweite Situation ausgeführt. 🎜🎜Zweite Ausführungssituation🎜Der zweite Ausführungsfall🎜🎜🎜Fordern Sie zunächst eine nicht festgelegte Routing-Adresse an und sehen Sie, was zurückgegeben wird. 🎜🎜Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?🎜Error return🎜🎜🎜Gemäß den Anweisungen des Codes gehen wir zum Index-Controller, um ein _empty Methode, und fordern Sie sie dann erneut an, um zu sehen, was passiert. 🎜
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Stellen Sie die _empty-Methode im Controller ein

Sie können den Druckergebnissen entnehmen, dass diese Methode ausgeführt wird, wenn die Methode, auf die zugegriffen wird, nicht vorhanden ist_empty.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Ergebnisse drucken

Wie wird diese Methode ausgeführt? Diese Ausführungsmethode wird durch die Verwendung des Reflexionsmechanismus erreicht. Es gibt einen speziellen Artikel zur Erläuterung der Reflexion von Kaka, aber Sie müssen das Dokument noch lesen und anzeigen.

Der dritte Fall: Es gibt keine ausführbare Methode oder _empty-Methode in der Klasse

Dieser Fall ist relativ einfach, er gibt nur die Fehlermeldung direkt zurück. Apropos.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Die dritte Situation

Nach der Ausführung der drei Situationen

Nach der Analyse der drei Situationen wird am Ende die statistische Methode implementiert.

Die Methode zum Aufrufen der Reflexionsausführungsklasse unterstützt die Parameterbindung, was bedeutet, dass der Abschlussausführungsprozess hier abgeschlossen ist.

Zu den nachfolgenden automatischen Anfragen werden Einzelheiten in Abschnitt 5 erläutert.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Statistische Ausführung

2. Wie die Routing-Adresse vom Controller instanziiert wird

Im vorherigen Abschnitt haben wir das Routing für drei oder vier Perioden erklärt, und die letzte Erklärung ist dann die Routing-Planung wie man das eingestellte Routing ausführt!

Verwenden Sie diese Route als Nächstes als Fall

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Fallroute

Erinnern Sie sich an den Rückgabewert, als Sie mit der Routenerkennung begonnen haben? Bitte schauen Sie sich das Bild unten an

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Routenerkennung
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Ergebnisse drucken

Zu diesem Zeitpunkt gab es keine detaillierte Erklärung des folgenden Codes. Er erklärte direkt die Instanziierung des Controllers ist jetzt Aktuelle Planungsinformationen aufzeichnendiese Zeile Code. 记录当前调度信息这行代码。

在这里$this->request

HereDer Code wird also an der unten gezeigten Position ausgeführt, um die Planungsinformationen der aktuellen Anfrage festzulegen oder abzurufen🎜<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/20201111114359747.png" alt="Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Stellen Sie die Planungsinformationen der aktuellen Anforderung ein oder rufen Sie sie ab. Wenn Sie hier bei der Controller-Instanziierung drucken, werden Sie feststellen, dass der hier zurückgegebene Wert </figcaption> ist. Kommen Sie als Nächstes zur Controller-Prüfung es raus. </figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"><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);">index

Daten drucken
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Gehen Sie zur Init-Methode, um das Ergebnis auszudrucken und die Ergebnisse unter Verwendung der Routing-Adresse anzuzeigen.

Daten drucken
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wissen Sie, warum sich der Wert hier geändert hat?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?Der oben gedruckte Wert ist das Bild unten, warum ist es hier das Bild oben!
Ergebnisse drucken没有Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Der letzte Schritt im Routing-Abschnitt besteht darin, die Routing-Planung zu initiieren und schließlich eine Routing-zu-Modul-/Controller-/Betriebsmethode aufzurufen.
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Routenplanung

Diese MethodeWie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

根据代码追踪可以看到其实就是thinkroutedispatchModule这个类

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

来到Module这个类,又会发现继承着Dispatch

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

thinkphp/library/think/route/Dispatch.php这个类的控制器中,会发现对dispatch

Route zum Modul/Controller / Action 🎜An Modul/Controller/Aktion weitergeleitet🎜🎜🎜gemäß Code Sie können der Ablaufverfolgung entnehmen, dass es sich tatsächlich um Diese Klasse 🎜🎜<img src="https://img-blog.csdnimg.cn/20201111141709893.png" alt="Alias ​​der Klasse" style="max-width:90%"> Alias ​​​​der Klasse 🎜🎜🎜 ; Randradius: 0 2px; Hintergrundfarbe: rgba(27,31,35,.05); ; color: rgb (271, 93, 108);">Modul Sie werden feststellen, dass es Dispatch class🎜🎜Vererbung der Klasse 🎜Vererbung der Klasse🎜🎜🎜 in thinkphp/library/think/route/Dispatch.phpIm Controller davon Klasse finden Sie den dispatchDiese Variable eingestellt ist. 🎜
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Variablenzuweisung

Schauen Sie zurück und werfen Sie einen Blick auf diese ZeitRoute to module/controller/operationWelche Parameter werden hier an die Methode übergeben, hahaWie instanziiert die ThinkPHP-Routing-Adresse den Controller?这里的方法传入的参数是什么,哈哈

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?的参数
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?的参数

所以说最终的值就是刚刚打印的只是单独的数组形式的。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

那么接下来的动作就跟不使用路由访问的流程一样的,就不用在进行解析了。

直到这里关于路由地址是怎么进行控制器实例化的就结束了。

关于给$this->app->controller传入的是index,返回的是整个类名,具体的实现过程就不去解析了,实现的方法是$this->parseModuleAndClass

 An Module/Controller/Aktionen weitergeleitete Parameter

Routing an Module / Die Parameter des Controllers/BetriebsDer Endwert wird also einfach in Form eines separaten Arrays gedruckt. instantiierter ControllerInstanziieren Sie den Controller

Dann ist die nächste Aktion die gleiche wie der Prozess, bei dem der Routing-Zugriff nicht verwendet wird, und es ist keine Analyse erforderlich.

Dies ist das Ende der Instanziierung der Routing-Adresse im Controller. 🎜🎜Über $this->parseModuleAndClass, Sie können Ihre eigene Recherche durchführen! 🎜🎜🎜🎜🎜 3. AutoResponse-Planung ausführen 🎜🎜🎜🎜🎜 Im vierten Abschnitt wird nur erwähnt, dass die Methode im Ausführungscontroller von der Stelle in der Abbildung unten zurückkehrt, aber wie die Rückkehr erfolgt, wird nicht im Detail erklärt. 🎜🎜Ich werde mir einen Moment Zeit nehmen, um zu erklären, wie es ausgeführt wird. 🎜
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Automatische Anfrage

Die Zugriffsroutingadresse ist wie unten gezeigt. Sie können sehen, dass es sich bei den zurückgegebenen Daten um die Daten handelt, die im Controller zurückgegeben werden müssen.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Die vom Controller zurückgegebenen Daten
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Drucken Sie den Wert der Daten aus

Der gedruckte Wert ist wie im Bild unten dargestellt. Hier müssen Sie sich im Klaren sein! Das Lesen des Quellcodes erfordert ein wenig Recherche, und mit der Zeit werden Sie den Inhalt verstehen.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Druckposition

Als nächstes $this ->autoResponse($data);Diese Methode führt eine detaillierte Analyse durch. Diese Methode bedeutet wörtlich automatische Antwort. $this->autoResponse($data);这个方法进行深入的解析,这个方法按照字面意思就是Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

在这个执行流程的第一行中$data instanceof Response

🎜Automatische Antwort🎜🎜🎜In diesem Ausführungsprozess In der ersten ZeileWas Sie nicht wissen und nicht verstehen, muss noch gelöst werden. Lesen Sie einfach den Quellcode und erobern Sie ihn Stück für Stück, um zu gewinnen. <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);">Über die Verwendung von „Instanceof“</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;">Instanceof kann bestimmen, ob ein Objekt eine Instanz einer bestimmten Klasse ist und ob ein Objekt eine bestimmte Schnittstelle implementiert. </p> <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 wird Kaka Ihnen ein einfaches Beispiel geben, um dies zu demonstrieren, und Sie werden verstehen, was vor sich geht. </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);">Fall 1</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;">Erstellen Sie zunächst zwei Klassen. Der Fall ist wie unten dargestellt. </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/20201112115737556.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" alt="Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Demo-Fall</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;">Das Bild unten ist das Druckergebnis. Sie können sehen, dass das erste true und das zweite false zurückgibt. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"> bestimmt, ob ein Objekt eine Instanz einer bestimmten Klasse ist, also eine Instanz von <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);">$instance就是类Test, und gibt daher true zurück.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Ergebnisse drucken

Fall zwei

Fall zwei unterscheidet sich von Fall eins. Eine Schnittstelle wird eingerichtet, und dann implementiert die Klasse die Schnittstelle.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?二
Demonstrationsfall 2

Die endgültigen Rückgabeergebnisse sind alle wahr, was bedeutet, dass, wenn eine Klasse eine andere Schnittstelle implementiert, dies während der Beurteilung wahr ist.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Druckergebnisse

Das obige gilt für Instanz von Das Verständnis der beiden angegebenen Demonstrationsfälle besteht darin, festzustellen, ob eine Instanz eine Instanz einer bestimmten Klasse ist. instanceof给出的俩种Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?,对其理解就是判断一个实例是否为某个类的实例。

那么就在回到正文,$data instanceof Response这行代码肯定不会成立,因为data传过来的就是控制器返回的值。

所以说代码执行流程会执行到下图位置,使用了is_null

Gehen Sie dann zurück zum Text,

Die ersten beiden Punkte in diesem Code werden nicht analysiert.

Die erste besteht darin, den Antwortausgabetyp standardmäßig automatisch zu identifizieren. Dies dient dazu, festzustellen, ob es sich um eine Ajax-Anfrage handelt. Die spezifische Implementierungsmethode wartet dieses Mal, bis Kaka den Framework-Quellcode analysiert hat, und dauert dann einige Zeit Jeden Tag einige Methoden des Frameworks durchführen. 🎜🎜Die zweite Position besteht darin, die entsprechenden Konfigurationsinformationen aus der Konfigurationsdatei abzurufen. Sie betrachtet die Methode der Regelklasse, die ausgeführt wird, aber in der Methode befindet sich der Code, der ausgeführt wird, um die Konfigurationsinformationen zu erhalten. 🎜
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
Der erste Punkt im Ausführungsprozess des Codes

Dann müssen wir den dritten Teil analysieren, der oben nicht erwähnt wurde, nämlich den Code$response = Response::create($data, $type);$response = Response::create($data, $type);

来到类thinkphp/library/think/Response.php的方法create中,这个方法就是用来Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?。

这里只需要去关注一下咔咔圈出来的地方即可,在thinkphp/library/think/response

Come to classthinkphp/library/think/Response.php create, diese Methode wird zum Erstellen eines Antwortobjekts verwendet.

Sie müssen nur auf die durch den Klick umkreiste Stelle achten, in thinkphp/library/think/responseIn diesem Verzeichnis befindet sich kein HTML.
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?Der Code instanziiert diese Klasse also direkt und kehrt dann zurück.

Erstellen Sie ein Antwortobjekt

🎜🎜Wenn Sie zum Konstruktor dieser Klasse kommen, erledigen Sie hauptsächlich ein paar Dinge. 🎜
  • Weisen Sie den Rückgabewert dem Datenattribut dieser Klasse zu.
  • Legen Sie den Seitenausgabetyp fest.
  • Statuscode zurückgeben
  • In Fügen Sie hier die Bildbeschreibung ein
  • Dann weist der Code den Rückgabewert zu autoResponse$response diese Variable. <li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">Zum Schluss fügen Sie diesen <code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba(27,31) hinzu ,35,.05); Schriftfamilie: Operator Mono, Consolas, Monaco, Monospace; Senden Sie das Ergebnis zurück und drucken Sie es wie unten gezeigt aus. </section></li></ul><figure data-tool=" mdnice>Hier Bildbeschreibung einfügen<img src="https://img-blog.csdnimg.cn/20201112162041397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" alt="Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;"></figcaption><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 die Rückgabeinformationen aus<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);">autoResponse这个方法的$response这个变量。

    最后就是将这个$response

    Dann kehrt der Code weiterhin zur oberen Ebene zurück und kehrt zur ursprünglichen Verschlussfunktion zurück. Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
    An der von Kaka eingekreisten Stelle geht es in der nächsten Codezeile auch um Middleware. Sie müssen nur wissen, dass das endgültige Rückgabeergebnis mit dem im Bild gedruckten Ergebnis übereinstimmt.
    Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
    Zurück zur Zwischenebene

    Das endgültige Rückgabeergebnis ist zurück zu thinkphp/library/think/route/Dispatch.php, wir beginnen die Analyse von hier aus. thinkphp/library/think/route/Dispatch.php,咱们也就是从这里开始的解析的。

    Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?
    Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

    将返回的结果返回给$data,然后在进行执行return $this->autoResponse($data);

    你没看错,这里的代码熟悉吧!

    这个时候返回的结果就是Response的实例,所以会直接返回$response

    Bildbeschreibung hier einfügenWie instanziiert die ThinkPHP-Routing-Adresse den Controller?
    Geben Sie das zurückgegebene Ergebnis an return $this->autoResponse; ;

    Du hast richtig gelesen, der Code hier sollte dir bekannt vorkommen!

    Das zu diesem Zeitpunkt zurückgegebene Ergebnis ist

    Beharrlichkeit beim Lernen, Beharrlichkeit beim Bloggen und Beharrlichkeit beim Teilen sind die Überzeugungen, an denen Kaka seit seiner Karriere festhält. Ich hoffe, dass Kakas Artikel im riesigen Internet Ihnen ein wenig helfen können Kaka, wir sehen uns in der nächsten Ausgabe

Das obige ist der detaillierte Inhalt vonWie instanziiert die ThinkPHP-Routing-Adresse den Controller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
1
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