thinkphp 5.1 升级到 8.0 后大量报错“函数不存在”,因全局助手函数(如input、cookie、config等)被移除,须分别用request、cookie/session组件、config类替代;db::name()需改为db::table()或模型调用;路由中间件须传完整命名空间类名;模板语法需适配新命名空间与方法签名。

ThinkPHP 5.1 升级到 8.0 后大量报错“函数不存在”,是因为核心函数层被彻底重构,Db::name()、input()、cookie() 等全局助手函数全部移除,不替换就无法启动应用。
替换全局助手函数
第一步:打开项目中所有控制器、模型、公共函数文件,搜索 input(、cookie(、session(、config(、lang( 等调用。
方法一:用 Request 对象替代 input()
将 input('id') 改为 $this->request->param('id');若在非控制器类中使用,需先注入 Request 实例:app('request')->param('name')。注意:5.1 中 input('post.name') 在 8.0 中对应 $this->request->post('name'),类型方法必须显式指定。
方法二:用 Cookie/Session 组件替代 cookie() 和 session()
将 cookie('token') 替换为 $this->cookie->get('token');session('user') 替换为 $this->session->get('user')。这两个组件默认已绑定到控制器,无需手动 new。
方法三:config() 必须改为 Config 类调用config('database.hostname') → Config::get('database.hostname'),且需在顶部 use think\facade\Config;。不加 use 会直接报错 Class not found。
重写数据库操作逻辑
Db::name() 不再可用,所有数据库操作必须走模型或 Db 类的静态链式调用。
将 Db::name('user')->where('id', 1)->find() 改为:Db::table('user')->where('id', 1)->find()。注意:5.1 的 name() 是基于模型名自动映射表名,8.0 的 table() 必须传入真实表名字符串,【不能传模型类名】。
更推荐方式是创建模型类(如 app\model\User),然后用 User::where('id', 1)->find()。模型类需继承 think\Model,且默认开启严格模式,字段不存在会抛异常——务必核对数据库字段与模型 $schema 定义是否一致。
路由与中间件迁移
5.1 的闭包路由写法 Route::get('hello', function(){...}) 在 8.0 中仍可用,但中间件注册方式已变更。
原写法:Route::get('admin','index/index')->middleware('check');
新写法:Route::get('admin','index/index')->middleware(\app\middleware\Check::class);。【中间件必须传完整命名空间类名,字符串别名方式已被废弃】。
如果你在全局 middleware.php 中配置了中间件,需检查所有中间件类是否实现了 think\contract\MiddlewareInterface,并把 handle() 方法签名从 function(Request $request, Closure $next) 改为 public function handle(Request $request, \Closure $next)——少了反斜杠会导致类型错误。
模板引擎语法微调
5.1 模板中 {:url('index/hello')} 在 8.0 中仍可运行,但推荐改用 {:url('index/hello', ['id' => $id])} 的数组参数形式,避免字符串拼接漏洞。
模板中 {:dump($data)} 已被移除,改用 {:think\facade\Debug::dump($data)},且需确保 debug 模式开启(APP_DEBUG = true),否则无输出。
如果使用了自定义模板标签,例如 {mytag /},需将标签类从 think\template\TagLib 迁移到 think\Template\TagLib 命名空间,并重写 parse 方法签名,返回值类型由 string 改为 array。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











