PHP 8.4 新特性一览
最后更新于 作者: Paul Redmond
PHP 8.4 即将发布,在这篇文章中,让我们看看到目前为止已经公布的内容,以及您可能期待的哪些新特性。
PHP 8.4 预计何时发布?
PHP 8.4 预计将于 2024 年 11 月 21 日发布。在发布之前,它将经历 6 个月的预发布阶段,从 Alpha 版到 Beta 版,再到 Release Candidate 版,最后是正式发布。
新的数组查找函数
PHP 8.4 将带来新的数组查找函数,包括
-
array_find()
-
array_find_key()
-
array_any()
-
array_all()
参见我们关于 PHP 8.4 数组查找函数 的文章。
PHP 属性钩子
属性钩子受到 Kotlin、C# 和 Swift 等语言的启发,语法包括两种类似于短闭包和多行闭包的语法变体。
class User implements Named{ private bool $isModified = false; public function __construct( private string $first, private string $last ) {} public string $fullName { // Override the "read" action with arbitrary logic. get => $this->first . " " . $this->last; // Override the "write" action with arbitrary logic. set { [$this->first, $this->last] = explode(' ', $value, 2); $this->isModified = true; } }}
属性钩子将有助于消除属性 getter 和 setter 的样板代码,允许属性使用钩子来定义访问和更新。
查看我们的文章了解更多详情:PHP 8.4 中的属性钩子。
new MyClass()->method() 不带括号
自从引入实例化期间的成员访问以来,您必须将 new MyClass()
调用包装在括号中,否则您将得到解析错误。建议的语法将允许您访问常量、属性和方法,而无需额外的括号。
// Wrapping parentheses are required to access class members$request = (new Request())->withMethod('GET')->withUri('/hello-world'); // PHP Parse error (<= PHP 8.3): syntax error, unexpected token "->"$request = new Request()->withMethod('GET')->withUri('/hello-world');
此更新修复了使使用类成员访问更简单的 papercut,无需添加周围的括号或使用静态构造函数方法。此语法更改还使 PHP 与其他 C 语言(如 Java、C# 和 TypeScript)更加一致,这些语言不需要周围的括号。
查看我们的文章了解更多详情:PHP 8.4 中不带额外括号的类实例化。
从 Unix 时间戳创建 DateTime
在 PHP 8.4 中,使用新的 createFromTimestamp()
方法,从 Unix 时间戳创建 DateTime
将更加方便。它将支持典型的 Unix 时间戳以及包含微秒的时间戳。
$dt = DateTimeImmutable::createFromTimestamp(1718337072);$dt->format('Y-m-d'); // 2024-06-14 $dt = DateTimeImmutable::createFromTimestamp(1718337072.432);$dt->format('Y-m-d h:i:s.u'); // 2024-06-14 03:51:12.432000
在早期版本的 PHP 中,有几种方法可以从时间戳创建 DateTime 实例,例如 createFromFormat()
方法。
$dt = DateTimeImmutable::createFromFormat('U', (string) 1718337072);// DateTimeImmutable @1718337072 {#7948// date: 2024-06-14 03:51:12.0 +00:00,// } $dt = DateTimeImmutable::createFromFormat('U.u', (string) 1718337072.432);// DateTimeImmutable @1718337072 {#7950// date: 2024-06-14 03:51:12.432 +00:00,// }
新的 mb_ 函数
PHP 已经拥有 trim、ltrim、rtrim、ucfirst 和 lcfirst 函数很长时间了,现在在 PHP 8.4 中,它为这些函数添加了 mb_
,即多字节字符串支持。
- mb_trim
- mb_ltrim
- mb_rtrim
- mb_ucfirst
- mb_lcfirst
这些都与原始函数具有相同的参数。
了解更多
您可以在 wiki 上关注 PHP 8.4 准备任务。