files必须写在autoload里,不能放autoload-dev,否则生产环境函数加载失败;路径须相对composer.json且大小写敏感,修改后必须执行composer dump-autoload生效,并确保文件无副作用逻辑。

files必须写在autoload里,不能放autoload-dev
生产环境函数加载失败,八成是因为把files塞进了autoload-dev。Composer 默认只把autoload-dev.files注入到开发环境的 autoloader 中——哪怕你本地运行了composer install,只要加了--no-dev(CI/部署常用),这些文件就完全不会被加载。
正确位置只能是:"autoload": { "files": [...] }。如果同时需要 dev 环境额外加载测试工具函数,可以保留autoload-dev.files,但全局函数必须放在顶层autoload.files里。
路径必须相对composer.json,且大小写敏感
写"src/helpers.php"是对的;写"helpers.php"或"../src/helpers.php"是错的。Composer 解析路径时以composer.json所在目录为根,不支持上溯(..)或当前工作目录(.开头也不推荐)。
- Linux/macOS/Docker 下路径严格区分大小写:实际文件是
src/Helpers.php,配置成"src/helpers.php"就会静默跳过,运行时报Failed to open stream: No such file or directory - Windows 下可能“碰巧”成功,但上线前务必在目标环境用
ls -l src/helpers.php确认真实路径和大小写 - 通配符
"src/*.php"在 Composer ≥ 2.2 支持,但必须确保通配结果里全是合法 PHP 文件,否则dump-autoload可能失败或漏载
改完必须手动执行composer dump-autoload
Composer 不监听composer.json变更,install或update也不保证重生成 autoload 文件——除非你显式加了--optimize-autoloader或配置了"optimize-autoloader": true。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
最稳妥的做法就是每次改完files数组后,立刻运行:
composer dump-autoload
验证是否生效:
- 检查
vendor/composer/autoload_files.php是否已更新,里面应有你配置的路径 - 在目标 PHP 文件开头加
echo 'loaded'; die;,跑一次请求或 CLI 命令看是否输出 - 调用
get_included_files(),确认你的helpers.php出现在列表里
文件里只能放定义,不能有副作用逻辑
files里的每个 PHP 文件会在require 'vendor/autoload.php'时被require_once无条件执行一次。这意味着:
- ✅ 允许:
function my_log() { }、define('DB_HOST', 'localhost');、class_alias('Old', 'New'); - ❌ 禁止:
echo 'init';、$pdo = new PDO(...);、file_get_contents('config.json');、require 'bootstrap.php'; - 多个文件有依赖时,靠数组顺序控制:被调用的函数必须定义在调用它的文件之前
- 函数重复定义会直接
Fatal error: Cannot redeclare xxx(),IDE 不会提前报错,运行时才崩
最容易被忽略的是declare(strict_types=1)——它会作用于整个文件,且影响所有通过files加载的代码,跟主项目 strict 模式冲突时会立刻报错。

















