PHP 7.4 新特性
PHP7.4 新增加了一些非常给力的新特性。在未来很长一段时间内,这无疑是一个非常重大的版本升级。
PHP 7.4可能会在2019年12月发布。此页面将同时定期更新。最后更新时间:2019.5.27.
短闭包
短封闭允许更简洁的单行函数。
array_map(function (User $user) {
return $user->id;
}, $users)
array_map(fn(User $user) => $user->id, $users)
关于短闭包的一些注意事项:
- 他们可以访问父作用域,不需要
use
关键字。 $this
可以像普通的闭包一样使用。- 短闭包只能包含一行,也就是return语句。
你可以在这里深入阅读它们。
预加载
预加载是PHP核心的一个惊人的补充,可以带来一些重大的性能改进。
简而言之:如果您今天使用的是框架,则必须在每次请求时加载和重新编译其文件。预加载允许服务器在启动时在内存中加载PHP文件,并使它们永久可用于所有后续请求。
性能提升当然需要付出代价:如果预加载文件的来源发生变化,则必须重新启动服务器。
此特性可以大幅提升IO性能,性能提升约30-50%,甚至更高。
类属性类型声明
类变量可以加类型提示:
class A
{
public string $name;
public Foo $foo;
}
此RFC已被接受,并在PHP7.4 中实施。
协变返回和逆变参数
我以前写过PHP的类型系统,所以很高兴看到一些改进实际上是在PHP的核心。
类型变化 简而言之:你将能够使用协变返回类型......
class ParentType {}
class ChildType extends ParentType {}
class A
{
public function covariantReturnTypes(): ParentType
{ /* … */ }
}
class B extends A
{
public function covariantReturnTypes(): ChildType
{ /* … */ }
}
......和逆变参数。
class A
{
public function contraVariantArguments(ChildType $type)
{ /* … */ }
}
class B extends A
{
public function contraVariantArguments(ParentType $type)
{ /* … */ }
}
空融合赋值运算符
代替如下写法:
$data['date'] = $data['date'] ?? new DateTime();
你可以这样做:
$data['date'] ??= new DateTime();
更新 2019.1.23: 此功能现在合并到 了php 7.4 中。
数组spread运算符RFC
现在可以在数组中使用spread运算符:
$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];
// [0, 1, 2, 3, 4, 5, 6, 7]
请注意,这仅适用于带数字键的数组
外部函数接口
外部函数接口,简称FFI,允许从用户区调用C代码。这意味着PHP扩展可以用纯PHP编写。
应该指出,这是一个复杂的主题。您仍然需要C知识才能正确使用此功能。
现在终于能在PHP程序中写C语言了!!!
hash扩展始终启用
正如标题所说,这个扩展现在可以在所有PHP安装中永久使用。
引用反射
像Symfony的var dumper程序这样的库很大程度上依赖于反射API来可靠地转储变量。以前,没有对引用提供适当的反射支持,导致这些库依赖hack来检测引用。
php 7.4 添加了解决此问题的ReflectionReference
类
更新02-14:RFC已通过,PHP 7.4已确认更改。
另:https://kinsta.com/blog/php-7-4/
原创文章,转载请注明:来自Lenix博客。地址http://blog.p2hp.com/archives/5623
最后更新于 2019年8月2日