ThinkPHP 8 入门

维护状态提示:ThinkPHP 主仓最后一次版本发布是 2025-07-16(8.1.3),最后一次提交同月。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 appcontroller;

use appmodelUser as UserModel;
use thinkfacadeRequest;

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 thinkfacadeRoute;

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 appmodel;

use thinkModel;

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)无处不在

thinkfacadeDb、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,但方法的参数顺序有差异(比如 where('字段', '操作符', '值') 和 Laravel 一致,但 field() 对应 Laravel 的 select())。

3. 中间件

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

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 支持到 PHP 8.x,但后续 PHP 大版本(8.4、9.0)发布后,框架不会主动跟进。部署新 PHP 版本前必须先测。

② 第三方包依赖旧组件

ThinkPHP 用了部分 Symfony 组件。那些组件会持续升级,如果你的 composer.lock 被更新,可能出现版本冲突而框架不修。

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

③ 安全补丁的响应速度

历史响应正常,但长期看这是所有停止活跃维护的项目共同的风险。重要项目建议关注官方仓库的安全 issue。

什么时候选它

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

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

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

和 Laravel 的取舍

ThinkPHP 8Laravel 13
上手速度快中
中文文档完整翻译较多
生态规模中小极大
更新活跃度已放缓活跃
适合项目交付导向长期维护
暂无评论

发送评论 编辑评论

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