Yii2框架源碼追蹤閱讀(一)--從入口腳本index.php到類加載器的初始化

        我們以yii2-basic爲源碼閱讀剖析目標,首先,請到http://www.yiichina.com/download 下載框架源碼。

        接下來就開始我們的yii2源碼閱讀之旅吧。

請注意:由於本人會在閱讀過程中寫入各種註釋,有可能導致文章中的代碼所在行與實際框架中所在行有出入

 請註明文章來源:http://blog.csdn.net/lambert310


       從入口腳本index.php開始:
       入口腳本爲:web/index.php,這是整個yii2的啓動入口:


↑index.php全部內容(請註明文章來源:http://blog.csdn.net/lambert310)



4、5行見註釋即可,我們直接從第7行的類加載器開始,它引入了上一層目錄下vendor/autoload.php,其源碼如下:


autoload.php全部內容


第5行引入了當前目錄下/composer/autoload_real.php,然後在第7行調用了getLoader()這個靜態方法,我們繼續跟蹤:

autoload_real.php(1-31行)


  在這裏看從16行的getLoader()開始,具體可以見代碼註釋,在第28行將$loader實例化,ClassLoader.php的具體代碼稍後剖析,咱們繼續往下:

autoload_real.php(32-55行),請註明文章來源:http://blog.csdn.net/lambert310


在這裏,由於咱們使用的開發環境是php7.0.6,所以$useStaticLoader爲True,接下來引入autoload_static.php,相當於引入了下面的這個ComposerStaticInit9f9e4e27e79990b4ee47bd62041b34f3類,然後調用了getInitializer方法並傳入前面的$loader作爲參數:


↑autoload_static.php(687行--697行),(請註明文章來源:http://blog.csdn.net/lambert310)


在這裏使用了閉包,具體效果相當於把本類中的多個成員變量綁給了$loader我們看到這裏的$prefixLengthsPsr4,其實就是一個二維數組:


↑autoload_static.php(16行--31行)


然後下一個$prefixDirsPsr4:


↑autoload_static.php(77行--101行)


然後下面的$prefixesPsr0也是大致相同的效果,和前面的區別在於這是一個三維數組,原因可能是受psr4和psr0標準不同的影響:

↑autoload_static.php(190行--206行)

最後把$classMap也綁到loader上,$classMap保存了類到文件的直接映射:

↑autoload_static.php(228行--239行)


然後返回,這樣就把這些屬性配置綁定到了$loader上。

現在讓我們回到autoload_real.php,從56行開始:

autoload_real.php(56行--79行)


讓我們看到第57行,這裏調用了$loader自身的register方法並傳入了一個參數爲true:

↑ClassLoader.php(279行--282行)

       然後我們回到autoload_real.php,往下看到59行,這裏由於$useStaticLoader爲True,所以把                       

     autoload_static.php中ComposerStaticInit9f9e4e27e79990b4ee47bd62041b34f3這個類中的$file數組取出:

    

    ↑autoload_statis.php(7行--15行)    

   然後回到前面autoload_real.php的64行,這裏把$file中的各文件都require了一遍。


    到這裏,咱們的第一篇:《從入口腳本index.php到類加載器的初始化》,就剖析完畢了,

    下一次會帶來應用主體初始化的剖析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章