原創2021-10-31 23:53·煙花1219
使用composer構建的php專案,在專案根目錄下生成vendor目錄,vendor具體目錄如下:
vendor/autoload.php 檔案是composer自動載入的入口檔案(引導檔案).此檔案做了兩件事情:
- 載入檔案 vendor/composer/autoload_real.php檔案(該檔案的作用下文說明)
- 例項化類Composer\Autoload\ClassLoader
呼叫靜態方法get Loader()方法獲得ClassLoader例項
**
vendor/composer/autoload_real.php **此檔案的核心任務是分別載入composer的配置檔案:
- vendor/composer/autoload_classmap.php
返回class目錄對映關係
- vendor/composer/autoload_namespace.php
名稱空間和目錄之間的對映關係
- vendor/composer/autoload_psr4.php(推薦使用)
符合psr4的名稱空間之間對映關係
載入這些這些類和檔案目錄對應關係到記憶體中,一定要注意,這裡只是載入類與檔案的對應關係,並非真正的將所需的類檔案載入到記憶體中(這也說明了composer是惰性載入類的).
**
vendor/composer/ClassLoader.php(是和核心檔案)**
核心程式碼是:
使用php提供的函式spl_autoload_register註冊loadClass方法
loadClass方法使用前文已經載入到記憶體中類與路徑之間的關係,找到需要載入的檔案,然後將其載入進來:
composer第二次使用include函式
當例項化一個類,這個類不存在的時候,執行loadClass方法
總結:
composer載入核心思想是通過composer的配置檔案在引用入口檔案(autoload.php)時,將類和路徑的對應關係載入到記憶體中,最後將具體載入的實現註冊到spl_autoload_register函式中.最後將需要的檔案包含進來.
本作品採用《CC 協議》,轉載必須註明作者和本文連結