autoload.files 是唯一合法方式加载函数,因 PSR-4 和 classmap 均不支持函数声明;需路径正确、文件存在、执行 dump-autoload,且文件内容须无语法错误、无冲突、无副作用。

不支持自动发现,但支持手动加载——autoload.files 是唯一合法方式,其他任何尝试(比如 PSR-4 映射函数文件、用 classmap 扫函数文件)都会失败。
为什么 PSR-4 / classmap 都不能加载函数
PHP 函数没有命名空间绑定机制,也不靠类名定位,所以 PSR-4 只认 class 声明 + 文件路径映射,classmap 只提取 class、interface、trait 声明。你把 str_slug() 写在 helpers.php 里,PSR-4 和 classmap 都会直接跳过它——不是“没配对”,而是根本没设计这个能力。
-
psr-4:只处理以class开头、有命名空间声明的文件 -
classmap:扫描 PHP 文件,但只记录其中的类/接口/特质,忽略纯函数 - 试图把函数文件塞进
classmap或写错psr-4映射路径,结果都是Fatal error: Call to undefined function
files 字段怎么写才真正生效
必须满足三件事:路径写对、文件存在、执行了 composer dump-autoload。缺一不可,且 Composer 不会报错提示你漏了哪步。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 路径必须相对于
composer.json所在目录,例如"src/helpers.php"✅,"helpers.php"❌(会被当成当前工作目录下文件,不可靠) - 文件必须是真实存在的 PHP 文件,不能是目录,也不能是
../shared/functions.php(跨出项目根会被拒绝) - 改完
composer.json后必须手动运行composer dump-autoload,否则vendor/composer/autoload_files.php里根本没有新增条目 - 支持通配符(Composer ≥ 2.2),如
"src/functions/*.php",但src/functions/*.php(没引号)会 JSON 解析失败
files 加载后为什么函数还是找不到
常见原因不是配置错,而是运行时环境或文件内容出了问题,且错误堆栈常指向 ClassLoader.php,容易误判为 autoload 故障。
- 文件里有语法错误(比如漏了分号、用了新语法但 PHP 版本低),
composer dump-autoload不报错,但运行时 fatal - 函数名冲突,例如自己定义了
str_contains(),而 PHP 8.0+ 已内置,报Cannot redeclare str_contains() - 用了
declare(strict_types=1),但调用处传参类型不匹配,导致致命错误而非警告 - 测试环境没引入
vendor/autoload.php,PHPUnit 默认不自动加载,需在phpunit.xml或 bootstrap 中显式 require
files 文件里能放什么、不能放什么
它本质是每次 require_once 'vendor/autoload.php' 时无条件执行的脚本,不是“按需加载”,所以副作用必须严格规避。
- ✅ 允许:
function my_helper() { }、define('APP_DEBUG', true)、class_alias('OldClass', 'NewClass') - ❌ 禁止:
echo 'init';、file_get_contents(__DIR__ . '/config.json')、new PDO(...)、直接读$_ENV(环境可能未初始化) - ⚠️ 多个文件按数组顺序
require_once,后加载的可覆盖同名函数,但没加function_exists()防护就容易出错
最易被忽略的点是:文件路径写对了、命令也跑了,但函数仍不可用——大概率是文件里有隐性错误(语法、strict_types、函数重定义)或测试环境没加载 autoloader。别急着改配置,先检查那几个 PHP 文件本身是否干净可执行。

















