PHP 7.4中的新功能
- 发布日期可能在 2019 年 12 月左右,尚待确认
- 短闭包,可实现更简洁的单行书写
- 预加载,以提高性能
- 类中的类型属性
- 自定义对象序列化添加一种(反)序列化对象的新方法
- 改进类型差异
- 简化 Null 合并运算符
- FFI 为 PHP 扩展开发开辟新机遇
- 弃用短开标签
- 在数组中支持展开运算符
- 阅读以下内容了解更多
短闭包 RFC
短闭包实现更简洁的单行书写。
array_map(function (User $user) { return $user->id; }, $users)
array_map(fn(User $user) => $user->id, $users)
关于短闭包的一些注意事项:
- 可以访问父作用域,不需要
use
关键字。 $this
可以像普通的闭包一样使用。- 短闭包只能包含一行,也就是
return
语句。
你可以在这里深入阅读它们。
类型属性 RFC
类属性可以提示类型:
class A{ public string $name; public Foo $foo;}
改进的类型差异 RFC
我之前写过 PHP 的类型体系,所以很高兴看到一些 PHP 的核心被改进了。
类型差异是一个值得博客文章讨论的主题;简而言之:你将能够使用协变量返回类型。。。
class ParentType {}class ChildType extends ParentType {}class A{ public function covariantReturnTypes(): ParentType { /* … */ }}class B extends A{ public function covariantReturnTy<strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码*网/</strong><strong>搞gaodaima代码</strong>pes(): ChildType { /* … */ }}
。。。和反变量。
class A{ public function contraVariantArguments(ChildType $type) { /* … */ }}class B extends A{ public function contraVariantArguments(ParentType $type) { /* … */ }}
Null 合并运算符 RFC
不再需要这样做:
$data['date'] = $data['date'] ?? new DateTime();
你可以这样做:
$data['date'] ??= new DateTime();
数组展开运算符 RFC
现在你可以在数组中使用展开运算符:
$arrayA = [1, 2, 3];$arrayB = [4, 5];$result = [0, ...$arrayA, ...$arrayB, 6 ,7];// [0, 1, 2, 3, 4, 5, 6, 7]
请注意,这仅适用于带数字键的数组。
外部函数接口 RFC
外部函数接口,简称 FFI,允许从用户区调用 C 代码。这意味着 PHP 扩展可以用纯 PHP 编写。
应该指出,这是一个复杂的话题。您仍然需要 C 知识才能正确使用此功能。
预加载 RFC
预加载是 PHP 核心的一个振奋人心的新功能,可以带来不可预估的性能改进。
简而言之:如果您今天使用的是框架,则必须在每次请求时加载和重新编译其文件。预加载允许服务器在启动时于内存中加载 PHP 文件,并使它们持久化可用于所有后续请求(只要不停电)。