一, 前言
php7 目前 (截止 2018-09-17), 最新的稳定版本是 7.2.10(http://PHP.NET/downloads.PHP 上可查看版本信息), 目前还有不少项目是用 5.6 甚至更早的版本. 相比于 php5.x 的版本, php7 有不少新的改进, 性能方面也是有不少提升. 下面来详细讲下.
二, 新特性
1,php7.0 相比于 php5.6 的新特性
参考: http://PHP.NET/manual/zh/migration70.new-features.PHP 下面所讲的内容都是来自于这篇文章, 只是详细地解释.
1.1 标量类型声明
函数 / 方法中的参数, 是可以加一个类型声明的, 这个是 php5.0 就开始支持的, 比如:
- function testClass(类名 $c)
- {
- }
- function testArray(array $a)
- {
- }
php5.x 支持的这个类型不多, php7 增加了几个:
参考: http://PHP.NET/manual/zh/functions.arguments.PHP#functions.arguments.type-declaration
这里的意思是, 方法的参数的类型, 只支持上面列出的这些类型, 如果是其他类型, php5 报错致命错误, php7 会报错 TypeError 的异常.
举个例子:
- function test (boolean $b)
- {
- }
- test(true);
执行结果:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given, called in - on line 1 and defined in -:1
这里报错的原因是参数类型 boolean 不是一个合法的类型, 上面截图中可以看到是 bool 才对, 不能用 boolean. 这里有点不好理解, 就是我们大多会认为 boolean 就是 bool, 所以这里应该是规定好的, 就是只能用 bool, 不能用 boolean.
同理, 用 integer 也是错的, 要用 int. float 是包含了 float 和 double 的, 如果用 double 也是会报错的. 再解释下, 用 boolean 的时候, 因为不是 bool, 也不是 int,float,self,array 等, 所以这个 boolean 会被认为是 class 或者 interface,
报错信息里面展示的是参数必须是 boolean(类或接口) 的一个实例, 但是调用时传入的参数是 boolean 类型 (true 的类型). 有点绕, 但是应该不难理解.
1.2 返回值类型声明
返回值的类型, 跟参数的类型一致.
[注意] 在默认情况下, 函数返回值如果和定义的不一致, 会进行强制转换, 在严格模式下, 则会报错 TypeError.
这个例子这里是强制转换了类型.
函数返回值的说明参考: http://PHP.NET/manual/zh/functions.returning-values.PHP#functions.returning-values.type-declaration
1.3 null 合并运算符
1.4 太空船操作符 (暂时不清楚这个操作符有什么实际用处, 后续了解清楚再补充上)
1.5 define 允许定义常量数组
我们来看下 define 的声明, 参考: http://PHP.NET/manual/zh/function.define.PHP
这个新特性大概是为了丰富 define 的功能, const 已经实现了这个功能了的.
1.6 匿名类
详细的匿名类参考: http://PHP.NET/manual/zh/language.oop5.anonymous.PHP
[备注] 考虑到篇幅问题, 先跳过中间几个个人觉得不太常用的特性
1.7 use 分组命名空间
这里可以用一行代码引入同一个命名空间下的多个类, 而不是之前那样需要每个类一行代码, 算是一种优化.
1.8 新增整数整除的函数 inidiv()
返回值为整型.
参考: http://PHP.NET/manual/zh/function.intdiv.PHP
1.9 新增的随机函数
参考:
- http://PHP.NET/manual/zh/function.random-bytes.PHP
- http://PHP.NET/manual/zh/function.random-int.PHP
2,php7.1 相对于 php7.0 的新特性
参考: http://PHP.NET/manual/zh/migration71.new-features.PHP
涉及的内容不多, 直接看上面的 url 即可.
3,php7.2 相对于 php7.1 的新特性
参考: http://PHP.NET/manual/zh/migration72.new-features.PHP
涉及的内容不多, 直接看上面的 url 即可.
来源: https://www.cnblogs.com/guangye/p/9661164.html