"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 esbindParams
Diese Methode. bindParams
这个方法。
关于参数传递的就是一个反射类 第二个参数暂时不做说明,目前还没有遇到响应的场景。
第一个参数值$reflect
使用反射方法$reflect->getNumberOfParameters()
Figure>🎜$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
bindParams
Methode, das sollten Sie alle verstehen, es ist genau die Logik in der Abbildung unten. 🎜🎜getObjectParam
-Methode. 🎜In diesem getObjectParam
方法中并没有多少内容。
由于$vars
从头到尾都是空数组所以去除数组第一个的操作和判断是否为闭包都不会执行。
最终会在返回去执行make方法
然后make方法会直接从容器中返回这个实例
当一个反射类存在__make方法时,最终就会执行return $method->invokeArgs(null, $args);
<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
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!