骑驴找蚂蚁

全干工程师

PHP7.4新特性预览

虽然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月左右。

留言