ThinkPHP 6.0 版本发布——程序员节福利来了

流年
 流年
发布于 2019年10月24日
收藏 10

官方历时一年多倾力打造的ThinkPHP6.0版本正式发布,该版本基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化。

由于引入了一些新特性,ThinkPHP6.0运行环境要求PHP7.1+(推荐PHP7.3+),不支持5.1的无缝升级(官方提供了升级指导)。

文末有1024节日福利

主要特性:

  • 采用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扩展同时支持HTTPSocket服务,支持数据库和缓存的连接池功能,以及RPC功能。

调试工具更新

原来内置的页面Trace调试工具已经更改为扩展的方式,改成安装think-trace扩展,如果通过composer安装应用的话,默认会安装topthink/think-trace扩展。

基本用法和之前保持不变,但无需额外配置,默认使用html方式显示,同时仍然支持浏览器控制台显示,并仅在调试模式下有效。

同时增加了一个基于debugbar的调试扩展think-debugbar,需要单独安装后才能使用。

composer require topthink/think-debugbar

统一和精简大量用法

新版对很多用法进行了精简和统一,尽可能避免在开发过程中规范不一的困惑。

开发手册

更多内容可以查看官方的完全开发手册

抱着一份初心和坚持,ThinkPHP始终坚持完善和更新,十三年来持续发布了多个大版本。其实ThinkPHP历史以来的大版本都提供了超过年18个月的支持和维护,目前ThinkPHP主要版本的维护计划公告如下:

ThinkPHP版本 发布时间 BUG修复 安全更新
3.2(PHP5.3+) 2013年12月18日 结束服务 结束服务
5.0(PHP5.4+) 2016年9月15日 2019年1月1日 2020年1月1日
5.1(PHP5.6+) 2018年1月1日 2020年1月1日 2021年1月1日
6.0(PHP7.1+) 2019年10月24日 2021年1月1日 2022年1月1日

福利放送

最后是福利时间

庆祝新版发布,倾情奉献1024程序员节日福利

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:ThinkPHP 6.0 版本发布——程序员节福利来了
加载中

精彩评论

流年
流年
殊途同归 大道至简 主流开发思想都是趋同的 官方没有否认参考过Laravel,但思想和实现是两码事
这波天秀
这波天秀
国产最好框架,没有之一,永不加班,头发浓密
流年
流年
所以核心才需要精简
流年
流年
zendFramework十多年并没有太多进取 TP十多年如果还停留在TP3的时代 也早就没落了,从3.2跨越到5.0之后,TP更新就像上了发条一样,关键是保持思想更新就会跟上主流,只要语言不没落就仍然有机会
顾问-李
顾问-李
殊途同归说得好 主流的框架 最终使用最多的不还是orm来crud

最新评论(26

p
phper08
支持PSR-7规范吗?
iGoo
iGoo
从tp5开始支持tp了。
我做梦
👍
xiaoyoula
xiaoyoula
支持~
Tinywan
Tinywan
国产最好框架 感谢 @流年
whoru
whoru
底层思想都是一样的,只是实现方式的大同小异。
大家没必要纠结哪个框架好,哪个不好之类的了,找一个自己用着顺手的,然后把他用熟练就够了。
然后多看看框架源码,会比学了多个框架,却只停留在使用上更收益良多。
raykwok
raykwok
至少一直在做着同一件事,值得赞赏👍🏻
少惹是非
少惹是非
合计TP的官方啥能出一个友好的后台
流年
流年
既然有生态了 为啥要自己出后台呢 其实当初TP就出过一个CMF的 也有很多的产品借鉴 但开源产品的维护需要精力
else
else
等tkphp8.0
流年
流年
这步子有点大
MuskIron
MuskIron
不怕扯着蛋吗
lcccd
lcccd
十年前用过zendframework,功能虽然强大但实在是太繁琐了,一个多module就耗费了我近3天时间研究才搞定!随着VUE等技术兴起,ZF强大的VIEW已经没有了优势,逐渐在没落。就像Strus的没落一样。
流年
流年
zendFramework十多年并没有太多进取 TP十多年如果还停留在TP3的时代 也早就没落了,从3.2跨越到5.0之后,TP更新就像上了发条一样,关键是保持思想更新就会跟上主流,只要语言不没落就仍然有机会
返回顶部
顶部