「本文主要是學習每個方法中__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容器之綁定參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!