「本文主要是學習每個方法中__make這個方法是怎麼執行的,還有既然學習了容器我們如何使用容器來呼叫設定來獲取設定資訊。
」
解析bindParams方法
接下來就解析一下bindParams
這個方法。
關於引數傳遞的就是一個反射類 第二個引數暫時不做說明,目前還沒有遇到響應的場景。
第一個引數值$reflect
使用反射方法$reflect->getNumberOfParameters()
獲取反射類中對應的方法中的引數數目。按照上文的就是__make方法。容器程式碼中只獲取過倆個方法的引數數目,一個是__make方法,一個是就是反射類中的建構函式。
由於目前還沒有傳遞vars變數的場景,所以這塊的內容暫時不去研究它直接略過。
程式碼$params = $reflect->getParameters();
也是使用反射獲取方法的引數。
列印出來可以看到的結果是倆組資料。
那麼這這組資料是從哪裡來的呢!往上翻一下,看一下$reflect
這個引數是什麼就明白了。
think\App這個反射類是沒有__make方法的,所以會獲取建構函式中的引數。
然後think\Log反射類中存在__make方法,於是就會返回__make的引數,如下圖。
就像類似於think\Log這樣的類,既有__make方法,也存在建構函式,就會走倆次bindParams
方法,這個應該都明白,正是下圖邏輯。
在接下來就是迴圈反射類中獲取的引數。
獲取引數名、和獲取對應的反射類
最後將獲取出來的反射類傳遞給getObjectParam
方法。
在這個getObjectParam
方法中並沒有多少內容。
由於$vars
從頭到尾都是空陣列所以去除陣列第一個的操作和判斷是否為閉包都不會執行。
最終會在返回去執行make方法
然後make方法會直接從容器中返回這個範例
當一個反射類存在__make方法時,最終就會執行return $method->invokeArgs(null, $args);
,帶引數執行反射類方法
使用容器來呼叫設定類
既然已經把容器原始碼讀了一次了,可不可以使用容器來實現呢!
那當然是可以的了,這裡需要注意一下咔咔的名稱空間,這裡由於為了以後回顧方便把類名也起成了Container了,所以給加了一個別名,你們在使用的時候是不需要的哈!
截止到這裡容器的原始碼就講解的差不多了,後邊咔咔會做一個完整的流程圖,提供改大家檢視。
「堅持學習、堅持寫博、堅持分享是咔咔從業以來一直所秉持的信念。希望在偌大網際網路中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。
」
以上就是ThinkPHP容器之繫結引數的詳細內容,更多請關注TW511.COM其它相關文章!