Heim >PHP-Framework >Denken Sie an PHP >ThinkPHP-Container-Bindungsparameter

ThinkPHP-Container-Bindungsparameter

咔咔
咔咔Original
2020-10-12 12:58:502047Durchsuche
"

In diesem Artikel geht es hauptsächlich darum, zu lernen, wie die __make-Methode in jeder Methode ausgeführt wird, und nachdem wir nun den Container kennengelernt haben, wie können wir den Container verwenden, um die Konfiguration aufzurufen, um die Konfigurationsinformationen zu erhalten.

"

BindParams-Methode analysieren

Als nächstes analysieren wir esbindParamsDiese Methode. bindParams这个方法。

关于参数传递的就是一个反射类   第二个参数暂时不做说明,目前还没有遇到响应的场景。

第一个参数值$reflect

使用反射方法$reflect->getNumberOfParameters()

Bezüglich der Parameterübertragung handelt es sich um eine Reflexionsklasse. Der zweite Parameter wird vorerst nicht erläutert. Es gibt noch kein Antwortszenario.

Der erste Parameterwert Figure>🎜Reflexionsmethode verwenden$reflect->getNumberOfParameters() Ruft die entsprechende Methode in der Reflexionsklasse ab Anzahl der Parameter. Dem oben Gesagten zufolge handelt es sich um die __make-Methode. Die Anzahl der Parameter von nur zwei Methoden wurde im Containercode abgerufen, eine ist die __make-Methode und die andere ist der Konstruktor in der Reflektionsklasse. 🎜🎜Da es derzeit kein Szenario für die Übergabe von Vars-Variablen gibt, überspringen wir diesen Abschnitt, ohne ihn vorerst zu studieren. 🎜

Code$params = $reflect->getParameters; ; ist auch ein Parameter, der Reflektion verwendet, um die Methode zu erhalten. $params = $reflect->getParameters();也是使用反射获取方法的参数。

打印出来可以看到的结果是俩组数据。

那么这这组数据是从哪里来的呢!往上翻一下,看一下$reflect这个参数是什么就明白了。

thinkApp这个反射类是没有__make方法的,所以会获取构造函数中的参数。

然后thinkLog反射类中存在__make方法,于是就会返回__make的参数,如下图。

就像类似于thinkLog这样的类,既有__make方法,也存在构造函数,就会走俩次bindParams方法,这个应该都明白,正是下图逻辑。

在接下来就是循环反射类中获取的参数。

获取参数名、和获取对应的反射类

最后将获取出来的反射类传递给getObjectParam

Die Ergebnisse, die Sie beim Drucken sehen können, sind zwei Datensätze. 🎜🎜Woher kommt also dieser Datensatz? Scrollen Sie nach oben und werfen Sie einen Blick darauf ,35,.05); Schriftfamilie: Operator Mono, Consolas, Monaco, Monospace; Ich werde verstehen, was dieser Parameter ist. 🎜🎜Die thinkApp-Reflexionsklasse verfügt nicht über eine __make-Methode, daher werden die Parameter im Konstruktor abgerufen. 🎜🎜Dann gibt es eine __make-Methode in der thinkLog-Reflexionsklasse, Daher werden die Parameter von __make zurückgegeben, wie unten gezeigt. 🎜
🎜Genau wie eine Klasse wie thinkLog, die sowohl eine __make-Methode als auch einen Konstruktor hat, wird sie zweimal durchlaufen: bindParams Methode, das sollten Sie alle verstehen, es ist genau die Logik in der Abbildung unten. 🎜🎜 Der nächste Schritt sind die in der Schleifenreflexionsklasse erhaltenen Parameter . 🎜🎜Rufen Sie den Parameternamen und die entsprechende Reflexionsklasse ab.🎜🎜Übergeben Sie abschließend die erhaltene Reflexionsklasse an getObjectParam-Methode. 🎜

In diesem getObjectParam方法中并没有多少内容。

由于$vars从头到尾都是空数组所以去除数组第一个的操作和判断是否为闭包都不会执行。

最终会在返回去执行make方法

然后make方法会直接从容器中返回这个实例

当一个反射类存在__make方法时,最终就会执行return $method->invokeArgs(null, $args);

Aufgrund von <img src="https://img-blog.csdnimg.cn/20200923172501697.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" alt="" style="max-width:90%">Die make-Methode wird schließlich nach der Rückkehr ausgeführt<span style="font-weight: 700; color: rgb(248, 57, 41);"></span><img zzg4ubmv0l2zhbmdryw5nnw="=" alt="" style="max-width:90%">Then make-Methode Diese Instanz wird direkt aus dem Container zurückgegeben. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"> G4ubmV0 L2ZhbmdrYW5nNw ==,size_16 ,color_FFFFFF,t_70#pic_center" alt="" style="border-radius: 6px; display: block; margin: 20px auto; max-width: include;"/>When Es gibt eine Reflexionsklasse. __make-Methode, <code style="font-size: 14px; Zeilenumbruch: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba( 27, 31,35,.05); Schriftfamilie: Operator Mono, Consolas, Monaco, Monospace: break-all;">return $method- > invokeArgs(null, $args);, führen Sie die Reflexionsklassenmethode mit Parametern aus

Verwenden Sie den Container, um die Konfigurationsklasse aufzurufen

Nachdem Sie den Container-Quellcode einmal gelesen haben, können Sie die verwenden Behälter, um es umzusetzen? Wolltuch!

🎜Natürlich ist es möglich, auf den Namensraum von Kaka zu achten. Zur Vereinfachung einer späteren Überprüfung wird der Klassenname auch als „Container“ bezeichnet. Sie benötigen ihn also nicht, wenn Sie ihn verwenden. Ha! 🎜🎜🎜🎜🎜Der Quellcode des Containers ist jetzt fast erklärt. Später wird Kaka ein vollständiges Flussdiagramm erstellen, das jeder sehen kann. 🎜

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 vonThinkPHP-Container-Bindungsparameter. 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