本文主要針對Config的源碼進行簡單的執行解析,從圖解到代碼希望你有更深的理解。上文提到的yaconf就是在這里體現的,每一篇文章都是為了給后邊做鋪墊。
六、Config源碼執行流程
雖說上面的Yaconf對于config的源碼解析沒有多大的幫助,但是也是在擴寬一下思路,以后在工作中可以嘗試使用Yaconf。
進入正題,想知道Config是怎么進行加載解析的,先來畫一個圖。一起看一下加載config的執行流程。

回到public/index.php,在上一期說了類的自動加載是在加載base.php文件的過程中執行的。
那么config的加載是在下圖框起來的這里,這里涉及到了容器,會有一個單獨的專題來對容器進行剖析。
這里就不過多說明了,這段代碼回去執行`D:phpstudy_proWWWthinkphpSourceCodeAnalysisthinkphplibrarythinkApp.php這個文件的run方法。
并且在run方法中需要追蹤的是initialize應用初始化這個函數
接著在initialize這個方法中就會看到配置文件的蛛絲馬跡,隨之而來就是一個初始化應用init
直到走到init方法中,才算是進入了主題。
開始了自動加載配置文件,并且還調用了config類中的load方法,也是需要一起閱讀的。
來到這里之后需要簡單的進行解讀一下
這段代碼會直接走到elseif中,因為在app目錄下沒有設置config目錄
并且這里有個configPath這個屬性熟悉吧!這個值最終就是D:phpstudy_proWWWThinkPHPSourceCodeAnalysisconfig

在接這就是把config目錄下的文件全部拿出來。
傳遞給config類的load方法
在這里有幾個知識點提一下,就當回顧了
-
scandir ?:以升序的方式返回一個目錄下的所有文件,還有第二個參數1,表示降序的方式返回一個目錄下的所有文件。 -
pathinfo:以數組的形式返回文件信息,分別為目錄名、文件名、擴展名,其中的幾個參數代碼中有提到,可以看下圖即可。
在這段代碼中有一個屬性configExt,這個值是在環境變量讀出來的,給的值是php

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