PHP 8.4 发布:有哪些变化以及为何重要
开发者社区迎来了期待已久的 PHP 8.4 版本——这是最流行的 Web 编程语言之一的新主版本。此次更新带来了一系列重大改进,包括期待已久的 property hooks、不对称可见性以及显著的性能优化。我们来分析每个 PHP 开发者都应该了解的关键变化。
1. Property Hooks(属性钩子)
最引人注目的新特性是能够直接在类属性声明中定义 getter 和 setter,而无需编写单独的方法。这极大地简化了计算或验证字段的处理。
class User{ public string $name { set => $this->name = trim($value); get => ucfirst($this->name); }}以前,要实现这样的逻辑,需要编写单独的 getName() 和 setName() 方法。Property hooks 使代码更简洁、更易读。
2. 不对称可见性
现在可以为属性的读取和写入设置不同的访问级别。例如,公开读取但受保护写入:
class Post{ public private(set) string $title;}这消除了仅为了访问控制而创建 getter 和 setter 的必要性,同时保持了封装性。
3. 改进的 JIT 与性能
PHP 8.4 对 JIT(即时编译)编译器进行了重大改造。核心开发者改进了编译决策的启发式算法,并减少了执行热代码路径时的开销。根据初步测试,与 PHP 8.3 相比,在合成基准测试中性能提升了 10% 到 25%。
- 循环和递归函数的加速
- 改进了对大数组的处理
- JIT 模式下内存消耗降低高达 15%
4. 新语法:带类型的数组解构
新增了在数组解构时指定类型的能力:
[$name, $age] = ['Иван', 30]; // 之前[ string $name, int $age ] = ['Иван', 30]; // 现在这增强了静态分析,并使代码具有自文档性。
5. 标准库的变更
- 新函数:
array_find()、array_find_key()、array_any()和array_all()—— 用于更简洁地处理数组。 - PCRE2 更新: 正则表达式库已更新至版本 10.44,修复了一些罕见错误。
- 弃用函数:
session_set_cookie_params()(建议使用ini_set())以及几个内部函数已被标记为弃用。
6. 弃用状态
在 PHP 8.4 中,以下内容已被标记为弃用:
- 通过
#[\\ReturnTypeWillChange]更改返回类型 —— 现在需要显式声明。 - 对非数组调用
isset()(例如