ThinkPHP 6+ 辅助类库必须通过 Composer PSR-4 规范加载,需同时满足:文件路径(如 app/utils/ArrHelper.php)、类名首字母大写(ArrHelper)、命名空间严格为 namespace apputils;,并在 composer.json 中显式配置 "app\utils\": "app/utils/",且执行 composer dump-autoload -o;入口文件必须引入 vendor/autoload.php。

ThinkPHP 6+ 的辅助类库不能靠“手动 require”或“import”硬塞,必须走 Composer PSR-4 加载链;否则 Class not found 是必然结果,不是配置漏了,是根本没进加载流程。
辅助类库放哪?路径和命名空间必须完全对齐
辅助类库(比如 app/utils/ArrHelper.php)要被自动加载,得同时满足三个硬性条件:
- 文件路径是
app/utils/ArrHelper.php(注意大小写,arrhelper.php不行) - 类名是
ArrHelper,且首字母大写(arrhelper或arr_helper都不识别) - 顶部声明命名空间为
namespace apputils;(末尾带反斜杠,不能写成apputils或AppUtils)
常见错误现象:Class "apputilsArrHelper" not found —— 这说明命名空间解析时把 当成了普通字符,根本没走 PSR-4 映射,大概率是命名空间里漏了反斜杠或用了小写。
composer.json 怎么配?psr-4 条目必须显式声明
TP6 不再自动扫描 app/ 下所有子目录,你加的每个辅助类目录都得在 composer.json 里注册。例如要加载 app/utils/:
立即学习“PHP免费学习笔记(深入)”;
"autoload": {
"psr-4": {
"app\utils\": "app/utils/"
}
}
注意点:
- 命名空间用双反斜杠
\转义(JSON 里单反斜杠会被吃掉) - 路径末尾必须带斜杠
"app/utils/",否则映射会错位 - 改完后必须运行
composer dump-autoload -o,不加-o在开发环境常不生效
为什么 new pputilsArrHelper() 还报错?检查 autoload.php 是否被引入
哪怕配置全对,如果入口文件 public/index.php 没正确加载 Composer 自动加载器,一切归零。确认这行存在且没被注释:
require __DIR__ . '/../vendor/autoload.php';
典型问题:
- 自己重写了入口,删掉了这行
- 误把
vendor/autoload.php改成thinkphp/base.php等旧方式引入 - 部署时没执行
composer install,导致vendor/autoload.php根本不存在
此时错误信息仍是 Class not found,但根源已不在你的类文件,而在加载器本身没启动。
extend 目录下的辅助类怎么加载?别信“自动注册”神话
TP6 的 extend/ 目录**默认不注册任何命名空间**。所谓“放进去就能用”,只在你手动调过 hinkLoader::addNamespace() 时才成立——但这方法 TP6 已弃用,且不会被 Composer 识别。
正确做法只有两种:
- 把类移到
app/下,按前面规则配composer.json - 或在
composer.json里单独为extend/下的目录加一条 psr-4,例如:"mylib\": "extend/mylib/"
最容易被忽略的是:TP6 的自动加载机制完全剥离了框架自身逻辑,它只是 Composer 的一层壳。你卡在哪个环节,基本就等于 Composer 的哪一环断了——不是 ThinkPHP “没加载”,是它压根没参与加载。



















