本系列第四篇文章,也是最后一篇
首先,我們先看看Composer的原始碼從哪里看起,當然,請您先準備好原始碼,
composer init或者直接install之后,自動生成了一個vendor目錄,這時您需要在檔案中手動的require這個vendor目錄下的autoload.php檔案,其實這個檔案又載入了vendor/composer/autoload_real.php,
在autoload_real.php中,我們發現了熟悉的spl_autoload_register函式,但這個檔案最大的作用是去加載ClassLoader.php這個檔案和一些目錄檔案,也在同級目錄下,這個檔案就值得大家好好研究下了,不過核心也無外乎前面三篇文章中的內容,但是在autoload_real.php中,大家可以發現在呼叫ClassLoader的register()函式前,還加載了幾個目錄相關的檔案:
- autoload_static.php,靜態加載方式,頂級類加載命名空間
- autoload_psr4.php,遵守PSR4規范的包目錄映射陣列檔案
- autoload_namespaces.php,命名空間映射,PSR0規范
- autoload_classmap.php,類圖映射,命名空間直接映射路徑
好深奧的感覺,不過PSR4您一定已經很了解了,其他的其實就是對應的沒有遵守PSR4規范的一些類別庫,而在ClassLoader中的register()函式就是加載的這些檔案中對應的路徑檔案,在這里,最好的方式是您可以多下載一些包,然后看看這些檔案發生了什么改變,比如我安裝了一個monolog后,autoload_psr4.php的內容變成了這樣:

接下來,composer這個命令干了什么您應該也就了解了,當您進行composer require時,首先修改了composer.json檔案,然后下載包,完成后根據包里的composer.json檔案中所對應的規范來修改對應的autoload_xxx.php檔案,完成了檔案命名空間相關內容的映射,當register()進行加載的時候,自然就得心應手了,
ClassLoader原始碼中重點閱讀的一些函式內容包括:
- findFile()
- findFileWithExtension()
- addPsr4()
- add()
相關參考檔案:
深入決議 composer 的自動加載原理
Composer概述及其自動加載探秘
Composer檔案
PSR規范
至此,深入學習Composer原理相關內容更新完成,其實還有更多可以學習的內容,比如安裝時的install檔案其實也是個php檔案,composer命令也是個phar檔案,也就是完全PHP實作的,原始碼的Github地址:https://github.com/composer/composer,也許在將來我們可以再深入的研究研究核心composer命令列相關的原始碼,到那時,再開一個系列文章再說,而這回,就先到這里吧!!
關注公眾號:【硬核專案經理】獲取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免費得PHP、專案管理學習資料
知乎、公眾號、抖音、頭條搜索【硬核專案經理】
B站ID:482780532
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232288.html
標籤:PHP
