共计 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
主要来解决 __wakeup
和Serializable
带来一些问题。可以通过 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
像 Symfony
的varCloner转储程序,这样的库很大程度上依赖于反射 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
)始终可用,类似于 date
,spl
和pcre
扩展。
以上就是 PHP 7.4
新特性和函数,如果你需要查看所有的更新,你可以通过 官方 公开的日志查看。这个版本对性能提升是非常明显的特别预加载的功能。让我们拭目以待吧。官方预计发布日期可能在 2019 年 12 月左右。