答案是ThinkPHP 5.1与TP6+门面命名空间不同:TP5.1用use think\Db,TP6+必须用use think\facade\Db;需通过composer show topthink/framework确认版本,并检查src/下是否存在facade/目录。

ThinkPHP 门面调用报“类找不到”,核心不是漏装类,而是命名空间写错了版本——TP5.1 和 TP6+ 的门面路径完全不同,混用就会直接失败。
先确认你用的是哪个 ThinkPHP 版本
运行命令:composer show topthink/framework,看输出是否以 5.1.x 开头。如果是,说明你正在用 TP5.1,它压根没有 think\facade 这个命名空间;如果显示 6.x 或 8.x,才支持 use think\facade\Db 这类写法。
- TP5.1 中所有门面类(如 Db、Cache、Log)都直接放在
think根命名空间下,不带facade子目录 - TP6+ 才把门面统一移到
think\facade下,并通过静态代理机制实现 - IDE(如 PHPStorm)有时会自动补全出 TP6 的路径,但项目实际是 TP5.1,必须手动删掉
facade\段
TP5.1 正确引入方式
不要写 use think\facade\Db,那是 TP6 的写法。TP5.1 应该这样写:
-
use think\Db;→ 然后调用Db::table('user')->select() -
use think\Cache;→Cache::get('key') -
use think\Log;→Log::info('msg')
这些类文件实际位于 vendor/topthink/framework/src/ 根目录下(如 Db.php),由 Loader 自动映射加载,无需额外配置。
立即学习“PHP免费学习笔记(深入)”;
TP6+ 正确引入方式
如果你确认是 TP6 或更高版本,门面类路径在 src/facade/ 目录下,引入必须带完整命名空间:
use think\facade\Db;use think\facade\Cache;use think\facade\Log;
注意:TP6+ 不再支持 use think\Db 这种写法,否则会提示 Class not found —— 因为 think\Db 类在 TP6 中已被移除,只保留 think\facade\Db。
检查是否真的缺类文件
进到 vendor/topthink/framework/src/ 目录下,看是否存在 facade/ 子目录:
- 有
facade/→ 是 TP6+,用think\facade\Xxx - 没有
facade/,只有Db.phpCache.php等单文件 → 是 TP5.1,用think\Xxx
别信 IDE 推导,以实际目录结构和 composer show 输出为准。



















