首页 小组 问答 话题 好文 素材 用户 唠叨 我的社区

php8.4前瞻[分享]前瞻 PHP8.4 的新特性

道亮_(:з」∠)_Lv.1管理员
2024-06-02 22:20:32
0
56

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

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

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

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

  • 弃用和移除的功能

    • 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中,可以在不需要额外括号的情况下进行链式调用方法。例如,传统的链式调用方式如下:


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

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


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

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

    使用场景

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

  • $user = new User();
    $result = $user->findUser('John')->getName(); // 传统方式
    $result = $user->findUser('John')->getName(); // PHP 8.4



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

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

  • $data = [
    'name' => 'John',
    'age' => 30
    ];
    $name = $data['name']?? ' guest';
    $age = $data['age']?? 18;

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

  • 在Promise中的应用:在异步编程中,链式调用可以使代码更加简洁。例如,在Promise中使用箭头函数进行链式调用:
  •    $promise->then($function1)->then($function2);

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

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

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

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

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

  • 更好的 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的主要原因是为了提高密码的安全性,以应对更高性能的硬件环境下的安全需求。

    道亮_(:з」∠)_
    道亮_(:з」∠)_

    142 天前

    签名 : 不交僧道,便是好人。   56       0
    评论
    站长交流