新特性
标量类型声明
标量类型声明有两种模式: 强制(默认)和严格模式。现在可以使用下列类型参数(无论用强制模式还是严格模式)
字符串(string)、整数(int)、浮点数(float)以及布尔值(bool)。它们扩充了 PHP 5
中引入的其他类型:类名、接口、array 和 callable。
要使用严格模式,declare 声明指令必须放在文件的顶部。这意味着严格声明标量是基于文件可配的。这个指令不仅影响参数的类型声明,也影响到函数的返回值声明(参见返回值类型声明,内置的 PHP 函数以及扩展中加载的 PHP 函数)。
完整的标量类型声明文档和示例参见类型声明章节。
null 合并运算符
由于日常使用中存在大量同时使用三元表达式和 isset() 的情况,我们添加了 null
合并运算符(??)这个语法糖。如果变量存在且值不为 null,就会返回自身的值,否则返回第二个操作数。
太空船操作符(组合比较符)
太空船操作符用于比较两个表达式。当 $a 小于、等于或大于 $b 时它分别返回 -1、0 或
1。比较的原则是沿用 PHP 的常规比较规则进行的。
匿名类
现在支持通过 new class 来实例化匿名类,这可以用来替代一些“用后即焚”的完整类定义。
详细文档可以参考匿名类。
Unicode codepoint 转译语法
这接受一个以 16 进制形式的 Unicode codepoint,并打印出一个双引号或 heredoc 包围的 UTF-8
编码格式的字符串。可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。
这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。
新增加的 IntlChar 类旨在暴露出更多的 ICU 功能。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。
若要使用此类,请先安装 Intl 扩展。
预期
预期是向后兼用并增强之前的 assert() 的方法。它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。
老版本的 API 出于兼容目的将继续被维护,assert() 现在是语言结构,它允许第一个参数是表达式,而不仅仅是待计算的
string 或待测试的 boolean。
关于这个特性的完整说明,包括如何在开发和生产环境中配置它,可以在手册上找到 assert() 语言结构。
生成器可以返回表达式
此特性基于 PHP 5.5 版本中引入的生成器特性构建的。它允许在生成器函数中通过使用 return
语法来返回一个表达式(但是不允许返回引用值),可以通过调用 Generator::getReturn()
方法来获取生成器的返回值,但是这个方法只能在生成器完成产生工作以后调用一次。
在生成器中能够返回最终的值是一个非常便利的特性,因为它使得调用生成器的客户端代码可以直接得到生成器(或者其他协同计算)的返回值,相对于之前版本中客户端代码必须先检查生成器是否产生了最终的值然后再进行响应处理来得方便多了。
其他特性
-
允许在克隆表达式上访问对象成员,例如:
(clone $foo)->bar()。