重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
這篇文章主要介紹了ThinkPHP容器中綁定參數(shù)的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
解析bindParams方法
接下來(lái)就解析一下bindParams
這個(gè)方法。
關(guān)于參數(shù)傳遞的就是一個(gè)反射類(lèi) 第二個(gè)參數(shù)暫時(shí)不做說(shuō)明,目前還沒(méi)有遇到響應(yīng)的場(chǎng)景。
第一個(gè)參數(shù)值$reflect
使用反射方法
$reflect->getNumberOfParameters()
獲取反射類(lèi)中對(duì)應(yīng)的方法中的參數(shù)數(shù)目。按照上文的就是__make方法。容器代碼中只獲取過(guò)倆個(gè)方法的參數(shù)數(shù)目,一個(gè)是__make方法,一個(gè)是就是反射類(lèi)中的構(gòu)造函數(shù)。
由于目前還沒(méi)有傳遞vars變量的場(chǎng)景,所以這塊的內(nèi)容暫時(shí)不去研究它直接略過(guò)。
代碼$params = $reflect->getParameters();
也是使用反射獲取方法的參數(shù)。
打印出來(lái)可以看到的結(jié)果是倆組數(shù)據(jù)。
那么這這組數(shù)據(jù)是從哪里來(lái)的呢!往上翻一下,看一下
$reflect
這個(gè)參數(shù)是什么就明白了。
think\App這個(gè)反射類(lèi)是沒(méi)有__make方法的,所以會(huì)獲取構(gòu)造函數(shù)中的參數(shù)。
然后think\Log反射類(lèi)中存在__make方法,于是就會(huì)返回__make的參數(shù),如下圖。
就像類(lèi)似于think\Log這樣的類(lèi),既有__make方法,也存在構(gòu)造函數(shù),就會(huì)走倆次bindParams
方法,這個(gè)應(yīng)該都明白,正是下圖邏輯。
在接下來(lái)就是循環(huán)反射類(lèi)中獲取的參數(shù)。
獲取參數(shù)名、和獲取對(duì)應(yīng)的反射類(lèi)
最后將獲取出來(lái)的反射類(lèi)傳遞給getObjectParam
方法。
在這個(gè)
getObjectParam
方法中并沒(méi)有多少內(nèi)容。
由于$vars
從頭到尾都是空數(shù)組所以去除數(shù)組第一個(gè)的操作和判斷是否為閉包都不會(huì)執(zhí)行。
最終會(huì)在返回去執(zhí)行make方法
然后make方法會(huì)直接從容器中返回這個(gè)實(shí)例
當(dāng)一個(gè)反射類(lèi)存在__make方法時(shí),最終就會(huì)執(zhí)行
return $method->invokeArgs(null, $args);
,帶參數(shù)執(zhí)行反射類(lèi)方法
使用容器來(lái)調(diào)用配置類(lèi)
既然已經(jīng)把容器源碼讀了一次了,可不可以使用容器來(lái)實(shí)現(xiàn)呢!
那當(dāng)然是可以的了,這里需要注意一下咔咔的命名空間,這里由于為了以后回顧方便把類(lèi)名也起成了Container了,所以給加了一個(gè)別名,你們?cè)谑褂玫臅r(shí)候是不需要的哈!
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“ThinkPHP容器中綁定參數(shù)的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!