短闭包,允许更简洁的单线功能。
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 文档。