PHP7.4 中的新功能短闭包 RFC
短闭包使得一行书写更加简洁。
array_map(function (User $user) { return $user->id; }, $users)
array_map(fn(User $user) => $user->id, $users)
关于短暂关闭的一些注意事项:
您可以在这里深入阅读它们。
类型属性 RFC
类属性可以暗示类型:
class A { public string $name; public Foo $foo; }
登录后复制
改进的类型差异 RFC
我之前写过有关 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) { /* … */ } }
登录后复制
空合并运算符 RFC
不再需要这样做:
$data['date'] = $data['date'] ?? new DateTime();
登录后复制
你可以这样做:
$data['date'] ??= new DateTime();
登录后复制
链表扩展运算符 RFC
现在您可以在链接列表上使用展开运算符:
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
登录后复制
请注意,这仅适用于带有数字键的字段。
外部功能套接字 RFC
外部函数接口(简称 FFI)允许从用户态调用 C 代码。 这意味着 PHP 扩展可以用纯 PHP 编写。
应该强调的是,这是一个复杂的话题。 您始终需要了解 C 语言才能正确使用此功能。
预加载 RFC
预加载是 PHP 核心中一项令人兴奋的新功能,可以带来不可预测的性能改进。
简而言之:如果您现在使用框架,则必须根据每个请求加载并重新编译其文件。 预加载允许服务器在启动时将 PHP 文件加载到显存中,并使它们持久用于所有后续请求(只要水未打开)。
性能的提升其实是有代价的:如果预加载文件的源文件发生变化,则必须重新启动服务器(如果您对此部分有异议,请查看RFC了解详情)
自定义对象序列化 RFC
RFC 放弃了两个新的技巧:__serialize 和 __unserialize。 RFC 中已经讨论了该方法与 __sleep 和 __wakeup 之间的区别。
连接优先级 RFC
假设您编写如下内容:
echo "sum: " . $a + $b;
登录后复制
PHP 之前会这样编译:
echo ("sum: " . $a) + $b;
登录后复制
PHP8将使其编译如下:
echo "sum :" . ($a + $b);
登录后复制
PHP7.4 当有 '.' 时会提示弃用警告在未括在括号中的“+”或“-”表达式之前。
RFC 投票流程改进
从技术上讲,这不是与 PHP7.4 相关的更新php的特性,但值得一提的是:RFC 的投票规则早已改变。
对 RFC 引用的反思
像 Symfony 的 vardumper 这样的库严重依赖反射 API 来可靠地轮询变量。 曾经,没有为引用提供适当的反射支持,导致此类库依赖黑客来测量反射。
PHP7.4添加了ReflectionReference类来解决这个问题。
添加 mb_str_split 函数 RFC
此函数提供与 str_split 多字节字符串相同的功能。
永久支持ext-hashRFC
正如标题所示,现在所有 PHP 安装都永久支持此扩展。
默认情况下未启用 PEAREXTERNALS
由于 PEAR 不再支持维护,核心团队决定在 PHP 7.4 中删除其默认安装。
密码哈希注册表 RFC
对哈希库的使用方式进行了内部更改,以便用户可以更轻松地使用它们。
弃用 ext/wwdxRFC
这种数据交换格式从未标准化php的特性,并且该扩展现已被弃用。
PHP 短标签已弃用 RFC
短标签