Composer不提供运行时模块加载,仅通过autoload.php注册自动加载器实现类的延迟加载;PSR-4映射须严格匹配命名空间与目录结构,末尾双反斜杠、路径斜杠、大小写均不可错,修改后需执行dump-autoload生效。

Composer 本身不提供“模块加载脚本”这种运行时动态按需引入机制——它只做静态类映射和一次性自动加载注册。所谓“动态按需”,实际是靠 PHP 的自动加载器(autoload.php)在类首次被引用时触发文件加载,不是你手动调用某个函数去“加载模块”。
psr-4 配置必须严格匹配命名空间与目录结构
这是最常出错的地方:路径写错、反斜杠漏转义、大小写不一致,都会导致类找不到。
-
psr-4映射中命名空间末尾必须带双反斜杠\(JSON 里写成"App\": "src/"),否则 PHP 解析时会把当作转义符 - 目录路径建议以
/结尾(如"src/"),避免"src"意外匹配到同名文件src.php - 类文件路径必须完全对应命名空间层级:
AppHttpControllerUserController→src/Http/Controller/UserController.php,连大小写都不能错 - 修改
composer.json后,必须执行composer dump-autoload,否则新映射不会生效
classmap 适合无命名空间或遗留代码
当你有老项目、纯函数库、或没按 PSR 规范组织的类,classmap 是兜底方案,但它不“动态”,而是预扫描生成静态映射表。
-
classmap只认物理路径,不看命名空间;写"lib/"就会递归扫描所有.php和.inc文件 - 不能用通配符(
"lib/*.php"无效),也不能写绝对路径(以/开头会被忽略) - 扫描结果存在
vendor/composer/autoload_classmap.php,可直接打开检查类名是否在里面 - 如果同时配置了
psr-4和classmap,psr-4优先匹配;类名冲突时,psr-4的版本会被先加载
files 加载全局函数或常量,不参与类加载流程
想让某些工具函数或配置常量在项目任何地方都能直接用?用 files,但它和“模块按需加载”无关,是启动即载入。
-
files数组里的每个路径都必须带.php扩展名,例如"src/helpers.php" - 这些文件会在
vendor/autoload.php被引入时立刻执行(类似require_once),不是懒加载 - 它不处理类,也不影响自动加载逻辑,只是补全“非面向对象”的代码组织方式
真正要注意的复杂点是:PSR-4 的“动态”本质是 PHP 自动加载器的延迟触发机制,不是 Composer 在运行时帮你做条件判断。一旦类名被解析,路径就由映射规则硬决定——没有运行时路径拼接、没有环境判断、也没有 fallback 逻辑。所以配置阶段的严谨性,直接决定了后续是否要花几小时 debug 类未找到的问题。











