关于Laravel,我有一个关于Composer自动加载的问题,即“psr-4”和“classmap”自动加载之间的区别。

我知道的一种区别是PSR-4不需要为每次更改或添加新文件重复dumpautoload,而classmap则需要为包含类的现有文件或在指定目录中添加新文件的现有文件中的每次更改重复dumpautoload

最佳答案

PSR-4标准要求您基于命名空间的严格文件系统结构。假设您在src目录中有一个带有App命名空间的应用,那么所有子命名空间都将镜像子目录,并且类名将与不带.php扩展名的文件名相同。

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

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

然后,自动加载器“知道”在哪里寻找某个完全限定名称的类,因此不需要dump-autoload命令来嗅探类的文件。

然后使用composer dump-autoload --optimize-autoloader标志或-o解决性能问题,该标志将生成类映射,类似于类映射自动加载的方式。

另一方面,类映射自动加载并不需要您具有几乎任何特定的文件或目录结构,它会递归地遍历指定目录和文件中的.php.inc文件,并嗅探其中的类。
{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}

然后将这些类添加到列表中(缓存在vendor / composer目录中的PHP文件中),该列表用于自动加载。

然后,必须通过运行composer dump-autoload命令将任何新类添加到该列表。

关于composer-php - PSR-4和类映射自动加载之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38686168/

10-11 21:11