PHP7.4新特性预览

2,558次阅读

共计 1878 个字符,预计需要花费 5 分钟才能阅读完成。

虽然 PHP 7.4 还未发布,但是 RFC 已经确定了该版本的一些新性。这个版本的改动有点多,有很多实用性功能。发布日期可能在 2019 年 12 月左右,但尚待确认。让我们看看有那些地方的改动。

  • 短闭包  RFC
  • 属性类型定义  RFC
  • Null Coalescing Assignment Operator RFC
  • 自定义对象序列化  RFC
  • 弃用左关联三元运算符  RFC
  • 预加载  RFC
  • 外部函数接口  RFC
  • Reflection for references RFC
  • mb_str_split RFC
  • ext-hash 始终开启RFC

短闭包

引用更简单的闭包写法,增加了类似 Lambda 的表达式的写法。

<?php
// 7.3 之前
array_map(function (User $user) {return $user->id; 
}, $users)
// 现在
array_map(fn(User $user) => $user->id, $users)

在原来的基础加上 fn 关键字。采用了类型 javascript => 写法。

属性类型定义

可以指定类属性的类型定义,更加的明确类型。

<?php

class A
{
    public string $name;

    public Foo $foo;

    protected ClassName $classType;

    private ?ClassName $nullableClassType;

     // Types are also legal on static properties
    public static iterable $staticProp;


}

这项特性增加,在写大型工程的时候,不必为变量类型返回值来回查看源码,这样对 IDE 的支持也更好。

Null Coalescing Assignment Operator

更短的 ?? 操作符写法。

<?php
// 7.4 之前
$data['date'] = $data['date'] ?? new DateTime();

// 现在
$data['date'] ??= new DateTime();

弃用左关联三元运算符

与大多数其他语言不同,PHP 中的三元运算符是左关联的而不是右关联的。对于在不同语言之间切换的程序员来说,左关联行为通常没有用,并且令人困惑。此 RFC 建议弃用并删除三元运算符的左关联性,并且需要显式使用括号。

<?php

echo 1 ? 2 : 3 ? 4 : 5;   // deprecated 7.4, 7.3 之前这是 ok 的。echo (1 ? 2 : 3) ? 4 : 5; // ok 

自定义对象序列化

添加两个新的序列化魔术方法 __serialize,__unserialize 主要来解决 __wakeupSerializable带来一些问题。可以通过 https://wiki.php.net/rfc/custom_object_serialization 来查看对比。

预加载

预加载是 PHP 这期核心的变更,可以带来一些重大的性能改进。

简而言之,如果您使用的所有 PHP Web 框架,则必须在每次请求时加载和重新编译其文件。预加载允许服务器在启动时在内存中加载 PHP 文件,并使它们永久可用于所有后续请求。

性能提升当然需要付出代价,如果预加载文件的来源发生变化,则必须重新启动服务器。

外部函数接口

外部函数接口,简称FFI,此 API 允许在纯 PHP 中加载共享库(.DLL 或.so),调用 C 函数和访问 C 数据结构,而无需深入了解 Zend 扩展 API,也无需学习第三种“中间”语言。对于 PHP,FFI 开辟了一种在纯 PHP 中编写 PHP 扩展和绑定到 C 库的方法。。这是一个复杂的主题。您仍然需要 C 知识才能正确使用此功能。大家可以阅读该项目来了解https://github.com/dstogov/php-ffi

Reflection for references

SymfonyvarCloner转储程序,这样的库很大程度上依赖于反射 API 来可靠地转储变量。以前,没有对引用的适当反射支持,导致这些库依赖 hack 来检测引用。PHP 7.4 添加了 ReflectionReference 类来解决这个问题。

mb_str_split

添加了多字节的字符串分割函数和 str_split 一样。

<?php
print_r(mb_str_split("你好中国", 2));

Array
([0] => 你好
    [1] => 中国
)

ext-hash 默认开启

哈希扩展(ext / hash)始终可用,类似于 datesplpcre扩展。

以上就是 PHP 7.4 新特性和函数,如果你需要查看所有的更新,你可以通过 官方 公开的日志查看。这个版本对性能提升是非常明显的特别预加载的功能。让我们拭目以待吧。官方预计发布日期可能在 2019 年 12 月左右。

正文完
 
Blood.Cold
版权声明:本站原创文章,由 Blood.Cold 2019-05-31发表,共计1878字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。