composer分析(二)結合PSR-4
阿新 • • 發佈:2020-07-21
composer分析(二)結合PSR-4
-
PSR-4提供了一種檔案和路徑對映關係,非常類似檔案系統的組織結構
-
全限定類名
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName> 規定了類必須有一個頂級名稱空間,可以有多個子名稱空間。 頂級名稱空間和目錄對應的關係相對特殊,可在autoload_psr4.php中檢視 對映關係是一個數組,是因為composer支援從多個目錄下載入同一個名稱空間字首 $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), 'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'), 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), ... 'App\\' => array($baseDir . '/App'), ); 子名稱空間分別對應頂級路徑下的資料夾,如 App\Logic\HttpController\TestController對應路徑是"{$baseDir} /App/Logic/HttpController"下的TestController.php 同時PSR-4要求檔名必須和類名保持完全一致,上述的TestController.php檔名由TesctController這個類名決定。
-
對映規則
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
-
composer資料夾下的檔案
autoload_classmap.php // 儲存類檔案和真實路徑對映 autoload_files.php // 儲存全域性函式檔案和路徑對映 autoload_psr4.php // 儲存頂級名稱空間和路徑對映 autoload_static.php // 儲存composer載入器解析過程中需要用到的對映關係陣列 ClassLoader.php 此檔案中的findFile方法會先查詢classmap中是否存在需要載入類的對映,如果不存在會先根據上文描述的PSR-4規則拼接檔案的真實路徑,沒找到還會走PSR-0規則。最後然會檔案的絕對路徑include完成檔案的載入。可以看到如果存在類路徑對映會非常快的實現類的自動載入,就不需要檔案系統的檢查了。 如何生成類對映關係: 執行命令 composer dump-autoload (-o),生產環境建議執行,因為從classmap中直接返回對映關係,便不需要再去動態讀取PSR載入規範了,可減少檔案系統的操作,提升部分效能
-
有興趣的可以列印composer返回的自動載入器物件,允許我們在引入autoload.php檔案後動態新增各種的對映關係
下集預告:composer的基本命令