ThinkPHP 5.x 与 3.x 的主要区别体现在架构设计、语法规范及功能特性上:
1. 架构规范
-
5.x :
严格遵循
PSR规范(如PSR-2、PSR-4),采用命名空间 和自动加载机制 ,代码组织结构更清晰。例如:控制器类需明确定义命名空间:
phpnamespace app\index\controller; class Index { ... } -
3.x :
未强制遵循
PSR规范,控制器通过类后缀标识(如class IndexController),依赖传统文件路径加载。
2. 路由机制
-
5.x :
支持 RESTful 路由,可通过注解或路由配置文件定义:phpRoute::get('user/:id', 'User/read'); // 定义GET请求路由 -
3.x :
路由配置较简单,主要通过URL参数解析(如m=module&a=action),灵活性较低。
3. 数据库操作
-
5.x :
引入 Query Builder 链式操作:phpDb::table('user')->where('id', 1)->find(); -
3.x :
使用连贯操作语法:phpM('User')->where('id=1')->find();
4. 模板引擎
- 5.x :
默认移除 Smarty 支持,强化原生PHP模板,支持标签库扩展。 - 3.x :
内置Smarty等第三方模板引擎。
5. 错误处理
-
5.x :
启用 异常机制 ,可通过自定义异常类捕获错误:phpthrow new \Exception('自定义错误'); -
3.x :
主要依赖传统错误提示(如E_ERROR)。
6. 安全性
- 5.x :
强化输入过滤(如自动过滤XSS攻击),支持CSRF防护中间件。 - 3.x :
需手动调用过滤函数(如I('post.name','','htmlspecialchars'))。
7. 性能优化
- 5.x :
引入 惰性加载 与 路由缓存,减少运行时开销。 - 3.x :
框架初始化开销较大,未内置路由缓存机制。
8. 兼容性
- 5.x :
要求PHP版本 ≥ 5.4,不再兼容旧语法(如mysql_*函数)。 - 3.x :
支持PHP 5.2+,兼容传统扩展。
总结
| 特性 | ThinkPHP 5.x | ThinkPHP 3.x |
|---|---|---|
| 架构规范 | PSR 标准 + 命名空间 | 传统类加载机制 |
| 路由 | RESTful + 注解 | URL 参数解析 |
| 数据库 | Query Builder 链式操作 | 连贯操作 |
| 模板 | 原生 PHP + 标签库 | 支持 Smarty |
| 错误处理 | 异常机制 | 传统错误提示 |
| 安全性 | 自动过滤 + CSRF 中间件 | 手动过滤 |
| 性能 | 惰性加载 + 路由缓存 | 无内置缓存 |
| PHP 版本 | ≥ 5.4 | ≥ 5.2 |
若需升级旧项目,需重点调整命名空间、路由配置及数据库操作语法。