2016-07-31 56 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