slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
PHP 8.4 的新特性
17611538698
webmaster@21cto.com

PHP 8.4 的新特性

编程语言 0 1532 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 日的正式发布。

作者:万能的大雄

评论