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日

PHP 7.4 新特性
标签: