class not found是psr-4自动加载失败,非语法错误;需确保命名空间声明、物理路径、自动加载三者严格对齐,大小写、斜杠、根前缀(如app)缺一不可,新增目录须执行composer dump-autoload -o刷新映射。

直接写 use 就能用,但前提是命名空间声明、文件路径、自动加载三者完全对齐;否则报 Class not found 是大概率事件,不是语法错,是路径映射断了。
类文件的命名空间声明必须和物理路径严格一致
ThinkPHP 5.0 的自动加载器(基于 Composer PSR-4)把命名空间当路径用。比如你要在 application/stock/service/Toshare.php 放一个类:
- 文件开头必须写
namespace app\stock\service; - 不能写成
namespace app\Stock\Service;(大小写不一致,Linux 下直接失败) - 也不能漏掉
app—— 因为app是框架预设的根命名空间,对应application/目录 - 类名必须与文件名一致:文件叫
Toshare.php,类就得是class Toshare
入口脚本里 use 之前要确认自动加载已生效
常见错误:在命令行脚本或独立入口中直接 use app\stock\service\Toshare,却忘了 TP 的自动加载还没启动。典型表现就是 Fatal error: Class 'app\stock\service\Toshare' not found。
- 确保已加载框架基础文件:
require __DIR__ . '/../../thinkphp/base.php'; - 确保没跳过初始化步骤(比如漏掉
\think\App::run()->send()或等效逻辑) - 如果只是想跑个简单脚本(如 CLI 工具),推荐用
think命令行方式启动:php think stock:refresh,它会完整初始化自动加载 - 实在要用独立入口,加一句
composer dump-autoload -o强制刷新自动加载映射(尤其新增了application/stock这种非标准子目录后)
新增非 app 根命名空间时,必须显式注册
比如你想把公司 SDK 放进 extend/mycompany/,并用 \mycompany\utils\Helper 访问,光放文件不行。
-
extend/mycompany/utils/Helper.php文件头写namespace mycompany\utils; - 不需要改任何配置——
extend/目录下的命名空间默认被自动注册(只要目录结构和命名空间匹配) - 但如果放到了
vendor/或自定义目录(如lib/),就必须手动注册:
在application/config.php加:'root_namespace' => ['mycompany' => APP_PATH . '../lib/mycompany/'] - 注意路径结尾不要斜杠,且必须是绝对路径(
APP_PATH是常量,指向application/)
最易忽略的一点:命名空间里的类,一旦涉及继承或调用其他命名空间的类,use 语句必须出现在 namespace 声明之后、class 定义之前,且不能跨文件省略——哪怕父类和子类在同一命名空间下,也建议显式 use 父类全名,避免 IDE 和静态分析误判。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











