徹底搞懂Composer自動載入原理

arvin-hermit發表於2021-11-01

原創2021-10-31 23:53·煙花1219

徹底搞懂Composer自動載入原理

使用composer構建的php專案,在專案根目錄下生成vendor目錄,vendor具體目錄如下:

徹底搞懂Composer自動載入原理

vendor/autoload.php 檔案是composer自動載入的入口檔案(引導檔案).此檔案做了兩件事情:

  1. 載入檔案 vendor/composer/autoload_real.php檔案(該檔案的作用下文說明)
  2. 例項化類Composer\Autoload\ClassLoader

徹底搞懂Composer自動載入原理

呼叫靜態方法get Loader()方法獲得ClassLoader例項

**
vendor/composer/autoload_real.php **此檔案的核心任務是分別載入composer的配置檔案:

  1. vendor/composer/autoload_classmap.php

徹底搞懂Composer自動載入原理

返回class目錄對映關係

  1. vendor/composer/autoload_namespace.php

徹底搞懂Composer自動載入原理

名稱空間和目錄之間的對映關係

  1. vendor/composer/autoload_psr4.php(推薦使用)

徹底搞懂Composer自動載入原理

符合psr4的名稱空間之間對映關係

載入這些這些類和檔案目錄對應關係到記憶體中,一定要注意,這裡只是載入類與檔案的對應關係,並非真正的將所需的類檔案載入到記憶體中(這也說明了composer是惰性載入類的).

**
vendor/composer/ClassLoader.php(是和核心檔案)**

核心程式碼是:

徹底搞懂Composer自動載入原理

使用php提供的函式spl_autoload_register註冊loadClass方法

loadClass方法使用前文已經載入到記憶體中類與路徑之間的關係,找到需要載入的檔案,然後將其載入進來:

徹底搞懂Composer自動載入原理

composer第二次使用include函式

當例項化一個類,這個類不存在的時候,執行loadClass方法

總結:

composer載入核心思想是通過composer的配置檔案在引用入口檔案(autoload.php)時,將類和路徑的對應關係載入到記憶體中,最後將具體載入的實現註冊到spl_autoload_register函式中.最後將需要的檔案包含進來.

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章