ThinkPHP 8 入门

维护状态提示:ThinkPHP 主仓仍在持续发版,当前为 8.1.4(已兼容 PHP 8.5)。官方在 2026 年的规划里明确「保持稳定的发布节奏」,并会把 AI 辅助开发、think-orm 4.0 等能力下沉到框架层。8.x 属于「稳定且仍在演进」,不是「停止维护」。本文按当前状态来写,同时标出需要注意的地方。

定位

国内中小项目的主力框架。中文文档完整、目录结构符合国内开发者习惯、上手快。外包项目、政企项目、需要快速交付的场景里出场率极高。

安装

composer create-project topthink/think tp-demo
cd tp-demo
php think run          # 内置服务器,默认 8000 端口

目录结构

tp-demo/
├── app/
│   ├── controller/     # 控制器
│   ├── model/          # 模型
│   ├── middleware.php  # 中间件注册
│   └── common.php      # 公共函数
├── config/             # 配置(app/database/route/cache...)
├── public/index.php    # 入口
├── route/app.php       # 路由定义
└── think               # 命令行入口

和 Laravel 对比:ThinkPHP 的 app 目录在根下(Laravel 也是),但没有 routes/ 目录(路由在 route/),配置文件是纯 PHP 数组(Laravel 也是),没有 Artisan(用 php think)。

最小示例

控制器

// app/controller/User.php
namespace app\controller;

use app\model\User as UserModel;
use think\facade\Request;

class User
{
    public function index()
    {
        return json(UserModel::select());
    }

    public function read($id)
    {
        $user = UserModel::find($id);
        if (!$user) {
            return json(['msg' => 'not found'], 404);
        }
        return json($user);
    }

    public function save()
    {
        $data = Request::only(['name', 'email']);
        $user = UserModel::create($data);
        return json($user, 201);
    }
}

路由

// route/app.php
use think\facade\Route;

Route::get('users',      'User/index');
Route::get('users/:id',  'User/read');
Route::post('users',     'User/save');

// 资源路由(一次生成 7 个 RESTful 接口)
Route::resource('articles', 'Article');

模型

// app/model/User.php
namespace app\model;

use think\Model;

class User extends Model
{
    protected $autoWriteTimestamp = true;   // 自动写入 create_time / update_time

    // 关联
    public function articles()
    {
        return $this->hasMany(Article::class);
    }

    // 访问器:读取时自动处理
    public function getNameAttr($value)
    {
        return trim($value);
    }
}

核心概念

1. 门面(Facade)无处不在

think\facade\Db、Request、Cache、Session、Config、Log 都是静态调用,但底层是真实对象。写法简洁,代价是不好 mock(测试时)。

2. 数据库查询构造器

// 查询构造器(类似 Laravel 的 DB facade)
Db::table('user')->where('status', 1)->order('id', 'desc')->paginate(20);

// 模型查询
User::where('status', 1)->with(['articles'])->select();

写法接近 Laravel,但两处对应关系容易搞混:指定查询字段用 field()(对应 Laravel 的 select());执行查询取结果集用 select()(对应 Laravel 的 get())——同名的 select() 在两边语义不同。

3. 中间件

// app/middleware/Auth.php
namespace app\middleware;

class Auth
{
    public function handle($request, \Closure $next)
    {
        if (!$request->header('Authorization')) {
            return json(['msg' => 'unauthorized'], 401);
        }
        return $next($request);
    }
}

注册在 app/middleware.php(全局)或路由上(局部)。

需要注意的地方

① PHP 新版本的兼容性风险

ThinkPHP 8.1.x 对新 PHP 版本是跟进的(8.1.4 已声明兼容 PHP 8.5),但节奏通常滞后于 PHP 发布。升级 PHP 大版本前,先看官方兼容说明并全量测试。

② 第三方包依赖旧组件

ThinkPHP 用了部分 Symfony 组件,并通过版本约束把它们锁在验证过的范围内——真正的风险不是「冲突没人修」,而是随手 composer update 拉到框架没验证过的新组件组合。

建议:锁定 composer.lock,不要随意 composer update。

③ 安全补丁的响应速度

历史响应正常,且 8.1.x 目前仍在持续发版。重要项目建议盯住官方仓库的安全 issue 与 changelog,发版后及时跟进。

什么时候选它

  • 国内中小项目、快速交付
  • 团队已经熟悉
  • 维护期预期不超过 3 年

为什么依然推荐:中小项目的核心矛盾是「交付周期」,不是「技术先进性」。ThinkPHP 在这件事上的效率优势真实存在,存量项目、招聘需求、教程资源也都在。

不选它的场景:需要长期演进(5 年以上)、需要紧跟 PHP 新版本、团队愿意投入学习 Laravel。

和 Laravel 的取舍

ThinkPHP 8Laravel 13
上手速度快中
中文文档完整翻译较多
生态规模中小极大
更新活跃度稳定迭代(8.1.x 持续发版)活跃
适合项目交付导向长期维护

延伸阅读

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇