2019 年 10 月 24 日 发布
官方历时一年多倾力打造的ThinkPHP6.0版本正式发布,该版本基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化。
由于引入了一些新特性,ThinkPHP6.0运行环境要求PHP7.1+(推荐PHP7.3+),不支持5.1的无缝升级(官方提供了升级指导)。
推荐视频教程:《ThinkPHP6.0极速入门》
主要特性:
● 采用PHP7强类型(严格模式)
● 支持更多的PSR规范
● 多应用支持
● ORM组件独立
● 改进的中间件机制
● 核心架构服务化
● 全新的事件系统
● 容器功能增强
● 模板引擎组件独立
● 内部功能中间件化
● SESSION机制改进
● 缓存及日志支持多通道
● 引入Filesystem组件
● 对Swoole以及协程支持改进
● 对IDE更加友好
● 统一和精简大量用法
强类型及严格模式
在主流框架里面,ThinkPHP6.0是最先采用PHP7严格模式的。所有的核心文件都是开启了严格模式的类型约束,因此有任何的变量类型不符的情况都会抛出异常,有利于规范代码中的变量类型和提前发现问题隐患。
多应用模式
新版框架提供了多应用模式支持,默认安装为单应用,你只需要安装一个多应用模式扩展就可以更轻松的部署多个应用而不需要重复安装依赖组件,每个应用都支持独立入口访问以及域名绑定,也可以使用一个入口文件实现自动多应用部署。并且自动多应用模式支持智能识别,对于不存在的应用访问会自动切换到单应用模式进行匹配。同时支持应用的映射和禁止访问机制。
多应用模式的设计可以让开发更加模块化,因为每个应用的配置、路由及视图都可以纳入应用目录,所以更方便应用的模块化,甚至引入composer应用。
容器和服务
新版的容器支持PSR-11规范,容器类的功能特性主要包括:
● 绑定类、对象实例、接口到容器
● 创建类的实例(存在则直接获取)
● 容器对象绑定别名
● 支持容器对象(实例化)回调
● 获取容器对象实例
● 删除容器中的对象实例
● 提供依赖注入和门面实现支持
● 调用容器对象实例的方法(或者闭包)
● 提供容器对象的ArrayAccess支持
事件系统
新版的事件系统可以看成是5.1版本行为系统的升级版,事件系统相比行为系统强大的地方在于事件本身可以是一个类,并且可以更好的支持事件订阅者。支持事件智能订阅,通过反射机制来识别当前订阅者要订阅的事件。
事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,也降低了BUG的可能性。
中间件支持完善
中间件分为全局中间件、应用中间件、路由中间件和控制器中间件,这四个中间件分组完全独立执行,但同一个分组内的中间件不会重复执行。中间件方法执行依赖注入,以及请求结束的回调机制。
核心很多功能都是基于中间件来完成,包括多应用模式也是采用中间件机制执行。
路由和请求
新版的路由精简了很多不必要的功能,路由定义也更加规范化和语义化,并且路由定义文件支持纳入应用目录,便于模块化开发。路由注解功能独立为think-annotation库,并且使用更加规范,支持IDE提示。
新版的请求对象更易扩展,系统默认安装后提供了一个app\Request类,你可以在应用中直接自定义请求对象,增加必要的属性和方法。但不会影响对think\Request的依赖注入和门面调用。
系统服务
由于核心框架采用了服务化设计,你可以在你的扩展或者应用中注册需要的服务。在系统服务中注册一个对象到容器,或者对某些对象进行相关的依赖注入。由于系统服务的执行优先级问题,可以确保相关组件在执行的时候已经完成相关依赖注入。一个服务类通常包括注册(register)和启动(boot)方法,用于不同阶段的执行。
ORM组件化
内置的ORM功能已经完全独立为think-orm组件,可以独立使用,ThinkPHP6.0默认依赖安装了该组件,保持用法不变的同时,增强了查询功能。
模板引擎组件化
核心不再内置任何模板引擎,仅提供PHP模板支持,官方的模板引擎已经独立为think-template模板引擎,并默认依赖安装。你可以更方便的使用第三方模板引擎。
日志系统
日志支持多通道、并统一命令行和WEB日志格式,主要包括:
● 日志增加多通道支持,可以同时或者切换写入多个通道
● WEB和CLI的日志记录格式统一,并支持日志格式化
● 对JSON日志格式的改进
● 支持日志写入事件
Session机制改进
6.0版本的Session机制完全重写了,并且不再使用PHP内置的Session机制,全新实现一套Session机制,可以更好的支持Swoole/Workerman等环境。
所以不再支持PHP内置的session_*** 系列函数,也不再支持使用$_SESSION读取session数据,你必须通过框架提供的Session类或者门面来操作,Request类也封装了Session数据的读取。
Session支持跨应用读取和自定义序列化机制,默认采用文件类型记录Session数据,由于共用了缓存机制,你还可以使用任何支持的缓存类型来记录Session数据。
引入Filesystem组件
新版增加了Filesystem类库对文件系统强化了支持,而且可以很方便的支持各种云存储,包括阿里云和七牛云。
Swoole扩展改进
Swoole扩展同时支持HTTP和Socket服务,支持数据库和缓存的连接池功能,以及RPC功能。
调试工具更新
原来内置的页面Trace调试工具已经更改为扩展的方式,改成安装think-trace扩展,如果通过composer安装应用的话,默认会安装topthink/think-trace扩展。
基本用法和之前保持不变,但无需额外配置,默认使用html方式显示,同时仍然支持浏览器控制台显示,并仅在调试模式下有效。
同时增加了一个基于debugbar的调试扩展think-debugbar,需要单独安装后才能使用。
composer require topthink/think-debugbar
统一和精简大量用法
新版对很多用法进行了精简和统一,尽可能避免在开发过程中规范不一的困惑。
开发手册
更多内容可以查看ThinkPHP6.0的《TP6完全开发手册》
抱着一份初心和坚持,ThinkPHP始终坚持完善和更新,十三年来持续发布了多个大版本。其实ThinkPHP历史以来的大版本都提供了超过年18个月的支持和维护,目前ThinkPHP主要版本的维护计划公告如下:
ThinkPHP6.0 GitHub地址:
https://github.com/top-think/think?tdsourcetag=s_pctim_aiomsg
https://github.com/top-think/framework?tdsourcetag=s_pctim_aiomsg