ThinkPHP容器之綁定參數(shù)

本文主要是學習每個方法中__make這個方法是怎么執(zhí)行的,還有既然學習了容器我們?nèi)绾问褂萌萜鱽碚{(diào)用配置來獲取配置信息。

解析bindParams方法

接下來就解析一下bindParams這個方法。

關于參數(shù)傳遞的就是一個反射類 ? 第二個參數(shù)暫時不做說明,目前還沒有遇到響應的場景。

第一個參數(shù)值$reflect

ThinkPHP容器之綁定參數(shù)

ThinkPHP容器之綁定參數(shù)使用反射方法$reflect->getNumberOfParameters()獲取反射類中對應的方法中的參數(shù)數(shù)目。按照上文的就是__make方法。容器代碼中只獲取過倆個方法的參數(shù)數(shù)目,一個是__make方法,一個是就是反射類中的構造函數(shù)

由于目前還沒有傳遞vars變量的場景,所以這塊的內(nèi)容暫時不去研究它直接略過。

代碼$params = $reflect->getParameters();也是使用反射獲取方法的參數(shù)。

打印出來可以看到的結果是倆組數(shù)據(jù)。

ThinkPHP容器之綁定參數(shù)那么這這組數(shù)據(jù)是從哪里來的呢!往上翻一下,看一下$reflect這個參數(shù)是什么就明白了。

thinkApp這個反射類是沒有__make方法的,所以會獲取構造函數(shù)中的參數(shù)。

ThinkPHP容器之綁定參數(shù)然后thinkLog反射類中存在__make方法,于是就會返回__make的參數(shù),如下圖。

ThinkPHP容器之綁定參數(shù)

就像類似于thinkLog這樣的類,既有__make方法,也存在構造函數(shù),就會走倆次bindParams方法,這個應該都明白,正是下圖邏輯。

ThinkPHP容器之綁定參數(shù)在接下來就是循環(huán)反射類中獲取的參數(shù)。

獲取參數(shù)名、和獲取對應的反射類

最后將獲取出來的反射類傳遞給getObjectParam方法。

ThinkPHP容器之綁定參數(shù)在這個getObjectParam方法中并沒有多少內(nèi)容。

由于$vars從頭到尾都是空數(shù)組所以去除數(shù)組第一個的操作和判斷是否為閉包都不會執(zhí)行。

最終會在返回去執(zhí)行make方法

ThinkPHP容器之綁定參數(shù)然后make方法會直接從容器中返回這個實例

ThinkPHP容器之綁定參數(shù)當一個反射類存在__make方法時,最終就會執(zhí)行return $method->invokeArgs(NULL, $args);,帶參數(shù)執(zhí)行反射類方法

ThinkPHP容器之綁定參數(shù)使用容器來調(diào)用配置類

既然已經(jīng)把容器源碼讀了一次了,可不可以使用容器來實現(xiàn)呢!

那當然是可以的了,這里需要注意一下咔咔的命名空間,這里由于為了以后回顧方便把類名也起成了Container了,所以給加了一個別名,你們在使用的時候是不需要的哈!

ThinkPHP容器之綁定參數(shù)

截止到這里容器的源碼就講解的差不多了,后邊咔咔會做一個完整的流程圖,提供改大家查看。

堅持學習、堅持寫博、堅持分享是咔咔從業(yè)以來一直所秉持的信念。希望在偌大互聯(lián)網(wǎng)中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享