PSR-4和classmap自动加载之间的区别?

RoM*_*oMo 20 autoload composer-php psr-4

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

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

Fin*_*nwe 38

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

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

src/
    Foo/
        Bar.php <---- App\Foo\Bar class
    Baz.php <---- App\Baz class
Run Code Online (Sandbox Code Playgroud)

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

然后使用composer dump-autoload --optimize-autoloaderflag 解决性能问题,或者-o,它将生成类映射,类似于类映射自动加载.


在另一方面,类映射自动加载不需要你有几乎任何特定的文件或目录的结构,它会递归经历.php.inc在指定的目录和文件的文件和嗅探在他们班.

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Toskan 为此,请使用“文件”。例如, `"autoload": { "files": [ "path/to/file1.php", "another/file.php", "etc.php" ] }`。 (2认同)