必须在入口文件中引入 vendor/autoload.php,否则自动加载不会启动;它通过 spl_autoload_register() 注册加载器、载入 psr-4/psr-0/classmap 映射、预加载 files 文件三步完成初始化。

必须在入口文件中 require_once 'vendor/autoload.php',否则自动加载根本不会启动——不是类找不到,是压根没注册加载器。
为什么 autoload.php 是唯一入口
它不只是个“引入文件”,而是执行了三件关键事:调用 spl_autoload_register() 注册全局加载回调、载入 PSR-4/PSR-0/classmap 映射表、预加载 files 配置里的全局函数文件。跳过它,等于没装发动机就点火。
- 手动
requireautoload_namespaces.php或autoload_psr4.php会漏掉spl_autoload_register()调用,new MyClass()直接报Class 'MyClass' not found - 某些框架(如 Laravel)在
public/index.php里写的是require __DIR__.'/../vendor/autoload.php',路径错一级就白干 - CLI 脚本也得单独引入,不能依赖 Web 入口——命令行没自动继承 Web 的加载上下文
composer.json 里 autoload 怎么配才生效
配完不 composer dump-autoload 或 composer install/update,配置就是废纸。Composer 不是实时监听 JSON 文件的热更新工具。
-
"psr-4": {"App\": "app/"}:命名空间AppFooBar→ 自动找app/Foo/Bar.php;注意末尾反斜杠和路径必须一致 -
"files": ["helpers/functions.php"]:这个文件会在每次请求时无条件require_once,适合放纯函数,别塞类定义 -
"classmap": ["legacy/"]:会扫描目录下所有.php文件提取class声明,生成扁平映射,适合老项目迁移,但修改文件后必须重跑dump-autoload
常见错误现象和对应检查点
报错不是随机的,基本就那几个根源:
-
Class 'XXX' not found:先确认vendor/autoload.php是否被引入;再查命名空间是否和psr-4配置前缀匹配;最后看文件路径大小写——Linux 下Foo.php和foo.php是两个文件 - 类能加载,但方法报
Call to undefined method:大概率是用了files加载了函数文件,却误以为是类方法;或classmap扫描时漏掉了新文件,忘了运行composer dump-autoload - 本地 OK,线上报错:检查
vendor/autoload.php是否被 Git 忽略(.gitignore 里写了/vendor),上线时有没有执行composer install --no-dev
最常被忽略的一点:autoload 机制本身不校验文件是否存在,只按规则拼路径。路径算错了,它就默默返回 false,然后 PHP 抛出标准的类未找到错误——你得自己顺着 findFile() 的逻辑去翻 autoload_psr4.php 里的映射,而不是怀疑 Composer 坏了。










