Products
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中的属性钩子包括两个主要的钩子:__get()和__set()。这种设计灵感来源于其他编程语言,如Kotlin、C#和Swift。
这意味着未来可能会引入更多类似的钩子,以进一步增强PHP的功能性和灵活性。
关于与现有代码的兼容性,PHP 8.4中的属性钩子设计考虑了向后兼容性。这意味着在迁移到PHP 8.4之前,现有的代码不会因为引入属性钩子而受到影响。开发者可以在不破坏现有代码的情况下,逐步迁移到使用属性钩子。
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
$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 扩展的支持主要包括以下几个新特性:
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的原因主要是为了提高密码的安全性。Bcrypt算法中的成本参数是一个迭代次数,这个数字以2的幂次表示。
此外,PHP社区通过RFC(请求功能性意见)提出并最终决定将默认值从10提升到12。这一决策是在考虑了性能和安全性的平衡后做出的。这表明社区普遍认为提高成本可以显著增强密码的安全性。
关于安全性的影响,增加BCrypt的迭代次数(即成本)会使得破解密码所需的时间大幅增加。在PHP 8.4中,将成本从10提升到12,理论上可以将破解时间延长四倍。虽然这个成本增加对现代CPU来说仍然是可接受的,因为即使是最慢的CPU在处理时也只需要大约0.5秒,但这种改进无疑会对潜在的攻击者构成更大的挑战。
总结来说,PHP 8.4将Bcrypt成本从10改为12的主要原因是为了提高密码的安全性,以应对更高性能的硬件环境下的安全需求。
Demand feedback