其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

PHP8.4 的新特性有哪些

GG网络技术分享 2025-03-18 16:19 0


PHP 8.4 将于2024年11月21日发布,带来了许多新特性和改进。以下是PHP 8.4 的主要新特性:

1. 属性钩子:这是一个重大的变化,允许开发者在属性访问前后添加自定义逻辑。

2. JIT(即时编译)改进:PHP 8.4 引入了新的JIT实现,这基于IR(中间表示)框架。

3. DOM扩展升级:PHP 8.4 的DOM扩展进行了重大升级,支持HTML5的解析和序列化。这意味着在处理HTML5特定标签或在JavaScript中嵌入HTML时将更加方便。

4. 弃用和移除的功能:

- PHP_ZTS 和 PHP_DEBUG 常量值类型从int改为bool。

- Implicitly nullable parameter declarations deprecated。

- Curl: CURLOPT_BINARYTRANSFER deprecated。

这些新特性和改进将使PHP 8.4 成为一个更加强大和灵活的编程语言,适用于各种不同的开发需求。

PHP 8.4 中的属性钩子是如何工作的,以及它们如何与现有代码兼容?

这些钩子可以通过两种语法变体来实现。

具体来说,PHP 8.4中的属性钩子包括两个主要的钩子:__get()和__set()。这种设计灵感来源于其他编程语言,如Kotlin、C#和Swift。

这意味着未来可能会引入更多类似的钩子,以进一步增强PHP的功能性和灵活性。

关于与现有代码的兼容性,PHP 8.4中的属性钩子设计考虑了向后兼容性。这意味着在迁移到PHP 8.4之前,现有的代码不会因为引入属性钩子而受到影响。开发者可以在不破坏现有代码的情况下,逐步迁移到使用属性钩子。

PHP 8.4 的JIT(即时编译)改进具体是如何实现的,与当前版本的JIT有何不同?

PHP 8.4 的 JIT(即时编译)改进主要基于一个新的 IR(中间表示)框架实现,这与之前的版本有显著的不同。

在 PHP 8.4 中,JIT 的默认配置发生了变化。尽管 JIT 仍然默认是禁用的,但其相关的 INI 配置项已经进行了调整。

PHP 8.4 引入了基于 IR 框架的新 JIT 实现。

总结来说,PHP 8.4 的 JIT 改进通过引入基于 IR 框架的新实现,提高了编译效率和性能,同时也对配置项进行了调整以适应新的实现方式。

在PHP 8.4 中,链式调用方法的具体语法和使用场景是什么?

在PHP 8.4中,链式调用方法的具体语法和使用场景如下:

### 具体语法

在PHP 8.4中,可以在不需要额外括号的情况下进行链式调用方法。例如,传统的链式调用方式如下:

php

$object->method1()->method2();

而在PHP 8.4中,可以简化为:

php

$object->method1()->method2();

这种语法的变化使得代码更加简洁和易读。

### 使用场景

1. 简化表达式:链式调用可以用于简化复杂的表达式,使代码更加清晰。例如:

php

$user = new User();

$result = $user->findUser(John)->getName(); // 传统方式

$result = $user->findUser(John)->getName(); // PHP 8.4

这种方式减少了冗余代码,提高了代码的可读性。

2. 结合数组解构和剩余参数:在PHP 8.4中,链式调用还可以与数组解构和剩余参数结合使用,进一步简化代码。例如:

php

$data = [

name => John,

age => 30

];

$name = $data[name]?? guest;

$age = $data[age]?? 18;

这种方式可以将多个操作连续执行,避免了重复赋值。

3. 在Promise中的应用:在异步编程中,链式调用可以使代码更加简洁。例如,在Promise中使用箭头函数进行链式调用:

php

$promise->then($function1)->then($function2);

这种方式减少了冗余代码,使异步编程更加高效。

PHP 8.4 对DOM扩展的支持包括哪些新特性,特别是对HTML5标签的支持细节?

PHP 8.4 对 DOM 扩展的支持主要包括以下几个新特性:

1. Opt-in DOM 规格符合性:PHP 8.4 引入了一个新的功能,即可选的 DOM 规格符合性。

2. HTML5 解析和序列化:PHP 8.4 支持了对 HTML5 标签的解析和序列化。

3. 更好的 HTML5 解析器:虽然不是直接由 PHP 8.4 引入,但相关的第三方库如 ivopetkov/html5-dom-document 提供了更好的 HTML5 解析能力。这些库能够保留 HTML 实体、处理空标签,并允许使用 CSS 选择器查询 DOM,这些都是传统的 DOMDocument 不支持的功能。

总结来说,PHP 8.4 在 DOM 扩展方面的主要新特性包括对 HTML5 标签的更好支持,以及提供了更多的配置选项来增强其与 Web 标准的兼容性。

PHP 8.4 密码哈希API修改为默认Bcrypt成本从10改为12的原因及其对安全性影响。

PHP 8.4将密码哈希API的默认Bcrypt成本从10改为12的原因主要是为了提高密码的安全性。Bcrypt算法中的成本参数是一个迭代次数,这个数字以2的幂次表示。

此外,PHP社区通过RFC(请求功能性意见)提出并最终决定将默认值从10提升到12。这一决策是在考虑了性能和安全性的平衡后做出的。这表明社区普遍认为提高成本可以显著增强密码的安全性。

关于安全性的影响,增加BCrypt的迭代次数(即成本)会使得破解密码所需的时间大幅增加。在PHP 8.4中,将成本从10提升到12,理论上可以将破解时间延长四倍。虽然这个成本增加对现代CPU来说仍然是可接受的,因为即使是最慢的CPU在处理时也只需要大约0.5秒,但这种改进无疑会对潜在的攻击者构成更大的挑战。

总结来说,PHP 8.4将Bcrypt成本从10改为12的主要原因是为了提高密码的安全性,以应对更高性能的硬件环境下的安全需求。

标签: 链式 钩子

提交需求或反馈

Demand feedback