Composer php PSR-4和类映射自动加载之间的区别?

Composer php PSR-4和类映射自动加载之间的区别?,composer-php,autoload,psr-4,Composer Php,Autoload,Psr 4,关于Laravel,我有一个关于Composer自动加载的问题,即“psr-4”和“classmap”自动加载之间的区别 我知道的一个区别是,PSR-4不需要为每次更改或添加新文件而重复dumpautoload,而classmap需要为包含类的现有文件中的每次更改或在指定目录中添加新文件而重复dumpautoload。PSR-4标准要求您严格遵守基于名称空间的文件系统结构。假设您在src目录中有一个应用程序,其命名空间为app,那么所有子命名空间都将镜像子目录,并且类名将与文件名相同,没有扩展名

关于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
然后将这些类添加到用于自动加载的列表(缓存在vendor/composer目录中的PHP文件中)


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

没有类的普通php文件如何?e、 g.只是一个包含一系列全局函数的php文件,如何添加它?@Toskan为此,请使用
文件
。例如,
“autoload”:{“files”:[“path/to/file1.php”,“other/file.php”,“etc.php”]}
。可以将类和文件一起加载,只需使用自动加载,因为我已经尝试过,但失败了。两个都可以,但一起没有骰子。只需将classmap/psr/文件并排使用即可。但是,自动加载/转储将在重复的类FQN上失败。如果你有一个具体的问题,也许可以单独提出一个问题。
{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}