17611538698
webmaster@21cto.com

PHP 8.4 的新特性

编程语言 0 945 2024-06-13 11:28:00

图片

随着 PHP 生态系统的不断发展,PHP 8.4 将给开发者带来一系列新功能和增强功能,将让开发更加顺畅、安全和高效。

PHP 8.4 计划于 2024 年 11 月 21 日发布,引入了几个值得开发者们探索,但又激动人心的更新。

增强的多字节字符串处理

PHP 8.4 的一个关键改进领域是多字节字符串的处理。

在新版本中引入了诸如mb_ucfirst、mb_lcfirst、mb_trim、mb_ltrim和mb_rtrim等函数,其目标是为开发者提供更好的工具来处理包含多字节字符的字符串。

这些函数确保对多字节字符串正确执行裁剪和更改大小写等操作,解决了从前版本的限制。

// mb_ucfirst 的用法示例echo mb_ucfirst("translation"); //输出:“Translation”

图片

DOM 扩展支持 HTML5

DOM 扩展在 PHP 8.4 中进行了重大更新,增加了对 HTML5 解析与序列化的支持。

新的DOM\HTMLDocument类允许开发者无缝处理 HTML5 内容,简化在 JavaScript 中嵌入 HTML 任务,并能够有效地处理现代化 Web 标准。

use DOM\HTMLDocument;$htmlDocument = HTMLDocument :: createFromString ( 'Hello, HTML5!' );

更强劲的密码哈希算法

在 PHP 8.4 中,安全性强调仍是重中之重。现在,8.4版本将默认的 bcrypt 加密级别从 10 设置为 12,即增强了密码哈希的强度,增加了破解哈希所需的计算工作量,使其更能抵抗黑客们的暴力攻击。

属性钩子

属性钩子(也称为属性挂钩)是 PHP 8.4 的最新功能之一。此特性受 Kotlin 和 C# 等编程语言的启发,属性钩子允许开发者覆盖类属性的默认获取与设置行为。此功能增加了新的灵活性,允许在访问或修改属性时执行自定义逻辑。

class BookViewModel{    public function __construct(        private array $authors,    ) {}    public string $credits {        get {            return implode(', ', array_map(                fn (Author $author) => $author->name,                 $this->authors,            ));        }    }

public Author $mainAuthor { set (Author $mainAuthor) { $this->authors[] = $mainAuthor; $this->mainAuthor = $mainAuthor; }

get => $this->mainAuthor; }}

属性钩子的目标是通过允许每个属性定义自己的get和set来删除大量getter和setter。但是此钩子是可选的,不必在特定属性上同时添加这两个钩子。例如,只有get钩子的属性是虚拟属性。

关于属性钩子还有很多话要说,我们计划很快写一篇关于它们的后续文章,如果你对此感兴趣,请订阅21CTO公众号。

下面的一件事我想提一下,这也是我最热衷的:属性钩子可以在接口中定义!

interface HasAuthors{    public string $credits { get; }    public Author $mainAuthor { get; set; }}

新的去括号能力

就好像光有属性钩子是不够的一样,PHP 8.4还有另一个功能可以节省大量的样板代码:你不必再将新调用包装在括号中,就可以在它们上链接方法。

因此,原来是这样做:

$name = (new ReflectionClass($objectOrClass))->getShortName();

现在可以这样来写:
$name = new ReflectionClass($objectOrClass)->getShortName();

我不知道大家是怎么样的,但我写了很多这样的代码,所以我非常高兴终于摆脱了那些括号们。顺便说一句,它不仅适用于方法,还可以链接属性、静态方法、常量——无论你想要什么都可以。

JIT更改

PHP 8.4 改变了 JIT 的启用方式。以前,我们必须将 opcache.jit_buffer_size 设置为0才能禁用jit,但现在可以这样禁用它:

opcache.jit=disableopcache.jit_buffer_size=64m

用户受此更改影响的是,如果他们明确指定了opcache.jit_buffer_size,但没有指定opcache.jit,这样是没有意义的。你必须添加opcache.jit=64m,跟踪才能启用jit。

最后,PHP8.4 也对JIT也进行了一些改进,在某些情况下使其运行更快,并占用更少的内存。

隐式可为null的类型弃用

PHP有这样一种奇怪的行为,即具有默认null值的类型化变量,将自动变为null:

function save(Book $book = null) {}// Deprecated: Implicitly marking parameter $book as nullable is deprecated,// the explicit nullable type must be used instead

现在这种行为现在已经被弃用,并将在PHP9中删除。解决方案是使Book显式为null:

function save(?Book $book = null) {}

结语

PHP 8.4 是一个重大更新,给开发者带来了众多增强功能。从改进的多字节字符串处理到 DOM 扩展中的 HTML5 支持,还有更强大的密码哈希处理,再有引入属性钩子,可以说此版本包含诸多的新功能,这将使 PHP 开发更加强大和安全。

无论您是处理大型 XML 文档,还是简化 HTTP 响应管理,PHP 8.4 都能为您和团队提供帮助——现在开始规划如何将这些新功能集成到您的项目中了。

敬请期待 2024 年 11 月 21 日的正式发布。

作者:万能的大雄

评论