2016-07-31 58 views
8

對於Laravel,我有一個關於Composer自動加載的問題,即「psr-4」和「classmap」自動加載之間的區別。PSR-4與類映射自動加載之間的區別?

1的區別,我知道是PSR-4不需要重複dumpautoload每一個變化或增加,而類映射在含有類或另外指定目錄的新文件的現有文件的每一個變化,需要dumpautoload新文件。

回答

21

PSR-4標準要求你有一個嚴格的基於命名空間的文件系統結構。假設您在src目錄中有App名稱空間的應用程序,則所有子名稱空間都將鏡像子目錄,類名將與不帶.php擴展名的文件名相同。

{ 
    "autoload": { 
     "psr-4": { "App\\": "src/" } 
    } 
} 

src/ 
    Foo/ 
     Bar.php <---- App\Foo\Bar class 
    Baz.php <---- App\Baz class 

自動加載,然後「知道」到哪裏尋找類一定完全合格的名稱,因此不需要轉儲自動加載命令來嗅探文件類。

然後用composer dump-autoload --optimize-autoloader標誌或-o解決性能問題,它將以類映射自動加載的類似方式生成類映射。


在另一方面,類映射自動加載並不需要你有幾乎任何特定的文件或目錄的結構,它會遞歸經過.php.inc文件在指定的目錄和文件嗅探在他們班。然後

{ 
    "autoload": { 
     "classmap": ["src/", "lib/", "Something.php"] 
    } 
} 

這些類被添加到其用於自動加載的列表(在供應商/作曲家目錄的PHP文件緩存)。

然後必須通過運行composer dump-autoload命令將任何新類添加到該列表中。

+0

什麼是無類的純php文件?例如只是一個PHP文件與一堆全局函數,如何添加? – Toskan

+1

@Toskan請參閱https://getcomposer.org/doc/04-schema.md#files – Finwe