短闭包,允许更简洁的单线功能。
array_map(function (User $user) { return $user->id; }, $users)
array_map(fn(User $user) => $user->id, $users)
关于短闭包的一些注意事项:
use
关键字。$this
就像普通的闭包一样可用。return
语句。类变量可以是类型提示:
class A { public string $name; public Foo $foo; }
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
contravariant arguments
class A { public function contraVariantArguments(ChildType $type) { /* … */ } } class B extends A { public function contraVariantArguments(ParentType $type) { /* … */ } }
//以前 $data['date'] = $data['date'] ?? new DateTime(); //PHP 7.4之后 $data['date'] ??= new DateTime();
现在可以在数组中使用 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 核心的一个惊人的补充,可以带来一些重大的性能改进。
简而言之:如果您今天使用的是框架,则必须在每次请求时加载和重新编译其文件。 预加载允许服务器在启动时在内存中加载 PHP 文件,并使它们永久可用于所有后续请求。
性能提升当然需要付出代价:如果预加载文件的来源发生变化,则必须重新启动服务器。
此 RFC 添加了两个新的魔术方法:__ serialize
和 __unserialize
。 这些方法与 __sleep
和 __wakeup
之间的区别在 RFC 中讨论。
PHP 7.4 允许使用下划线在视觉上分隔数值。 它看起来像这样:
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; //PHP 7.4引擎将自动忽略数字下划线
//有时,你可能这么写PHP代码: echo "sum: " . $a + $b; //PHP之前会像这样解释它: echo ("sum: " . $a) + $b; //PHP 8 将使它如此解释: echo "sum :" . ($a + $b);
PHP 7.4 在遇到包含 '.'
的未加表示的表达式时添加了弃用警告。 在 '+'
或 '-'
之前。
以前,无法在 __toString
中抛出异常。 由于一些旧的核心错误处理机制的解决方法,他们被禁止,但 Nikita 指出,这个 “解决方案” 实际上并没有解决它试图解决的问题。
此行为现在已更改,并且可以从 __toString
抛出异常。
短开标签 <?
已被弃用,将在 PHP 8 中删除。短回声标记 <?=
不受影响。
由于添加了扩展运算符,因此使用 array_merge 是有意义的。
$merged = array_merge(...$arrayOfArrays);
为了支持 $arrayOfArrays
为空的边缘情况,array_merge 和 array_merge_recursive 现在都允许空参数列表。 如果没有传递数组,将返回一个空数组。
//PHP 7.4之前: strip_tags($string, ''); //PHP 7.4之后: strip_tags($string, ['a', 'p']);
此函数提供与 str_split
相同的功能,但在多字节字符串上。
$merged = array_merge(...$arrayOfArrays);
正如标题所说,此扩展现在可在所有 PHP 安装中永久使用。
由于 PEAR 不再维护,核心团队决定使用 PHP 7.4 删除其默认安装。
对如何使用散列库进行内部更改,以便用户可以更轻松地使用它们。 更具体地说,添加了一个新函数 password_algos
,它返回所有已注册密码算法的列表。
三元运算符在 PHP 中有一些奇怪的怪癖。 此 RFC 为嵌套的三元语句添加了弃用。 在 PHP 8 中,此弃用将转换为编译时错误。
1 ? 2 : 3 ? 4 : 5; // deprecated (1 ? 2 : 3) ? 4 : 5; // ok
升级 PHP 版本时,您应该始终查看 PHP 完整的 UPGRADING 文档。