目前 PHP 的最新版本是 7.2.9 ,从 PHP 5.6 到 PHP 7 发生了许多变化。在Mac系统下可用php-version工具来切换php版本。
参考资料:
一些PHP 7.0 新特性/变更
7.0 新特性
null合并运算符
变量类型声明
变量类型声明可以有两种模式:强制(默认)和严格模式。类型参数可以定义为:字符串(string)、整形(int)、浮点型(float)以及布尔值(bool)。
1 |
|
- 返回值类型声明
- 组合比较符(添加’<=>’运算符)
组合比较符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。
1 | <?php |
通过define()定义常量数组
支持通过
new class来实例化一个匿名类
1 | <?php |
- Closure::call()新式闭包绑定
1 | <?php |
- 预期
提供当断言失败时抛出特定异常的能力
1 | <?php |
- 新添整数除法函数 intdiv()
1 | var_dump(intdiv(10, 3)); // int(3) |
- 会话选项
session_start() 可以接受一个 array 作为参数, 用来覆盖 php.ini 文件中设置的 会话配置选项。
不向后兼容的变更
错误和异常处理相关的变更
在 PHP 7 中,很多致命错误以及可恢复的致命错误,都被转换为异常来处理了。 这些异常继承自 Error 类,此类实现了 Throwable 接口 (所有异常都实现了这个基础接口)
Throwable层次结构
1 | interface Throwable |
为了兼容 PHP 5 和 PHP 7, 应该修改set_exception_handler(), 不应该指定参数类型为Exception,因为传递进来的参数类型可能为Error。
1 |
|
被移除的函数
所有的ereg*函数
mcrypt 别名
已废弃的 mcrypt_generic_end() 函数已被移除,请使用mcrypt_generic_deinit()代替。
此外,已废弃的 mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() 和 mcrypt_ofb() 函数已被移除,请配合恰当的MCRYPTMODE* 常量来使用 mcrypt_decrypt()进行代替
- 所有 ext/mysql 函数
其它变更
- $HTTP_RAW_POST_DATA 被移除
$HTTP_RAW_POST_DATA 被移除,使用php://input代替
- new 操作符创建的对象不能以引用方式赋值给变量
1 |
|
在 PHP 7 中将发生语法错误
- 在 PHP 7 中使用 PHP4 风格的构造函数,PHP7 会产生 E_DEPRECATED 警告。 如果还定义了 __construct() 方法则不受影响。
一些 7.1 新特性/变更
新特性
添加返回值类型void
短数组语法[]
短数组语法([])现在作为list()语法的一个备选项,可以用于将数组的值赋给一些变量(包括在foreach中)
1 | $data = [ |
可设置类常量可见性
多异常捕获处理
list()现在支持键名
支持为负的字符串偏移量
不向后兼容的变更
- 当传递参数过少时将抛出错误
在之前传递参数过少时将抛出警告(warning),现在将抛出异常(Error execption)。
废弃的特性
- 移除ext/mcrypt
此扩展被 OpenSSL 所取代。
