ThemesCorners
博客
9 分钟阅读作者 ThemesCorners

WordPress 开发者必用的 PHP 8.4 新特性

属性钩子、不对称可见性与新数组辅助函数——以及它们如何让真实的 WordPress 代码更干净。

PHP 8.4 自 2025 年底起就是托管型 WordPress 主机上使用最广泛的 PHP 版本,而 8.5 将在 2026 年 11 月发布。如果你的 composer.json 仍然写着 "php": ">=7.4",你正在白白错失代码可读性与性能上的提升。本文聊聊真正改变我每天 WordPress 编码方式的四个 8.4 特性。

1. 属性钩子(不再写一堆 getter/setter)

在 PHP 8.3 里,你在自定义文章类型类里反复写:

class Product {
    private string $name;
    public function getName(): string { return $this->name; }
    public function setName(string $value): void {
        $this->name = trim($value);
    }
}

在 PHP 8.4 里精简为:

class Product {
    public string $name {
        get => $this->name;
        set(string $value) => trim($value);
    }
}

钩子在读写属性时自动执行,因此你可以归一化数值(上面的 trim())、触发 do_action(),或者从 meta 表里取——而调用方完全感知不到这其实不是一个普通属性。

为什么对 WordPress 重要: 自定义文章类型与区块属性对象几乎总要做归一化。属性钩子让你能去掉一整层 WP_*_Repository::get_x() 辅助函数。

2. 不对称可见性

与上面相关,你现在可以限制谁能某个属性,而不限制谁能它:

class Order {
    public private(set) string $status = 'pending';
    public function pay(): void { $this->status = 'paid'; }
}

Order::$status 在任何地方都可读,但只能在类内部写入。这一个关键字替代了十几对 getStatus() 与私有 setter 的组合。

3. 新数组辅助函数——array_find

PHP 8.4 新增了 array_findarray_find_keyarray_anyarray_all。前两个是我每周都用的:

$adminUser = array_find(
    get_users(['role' => 'administrator']),
    fn (\WP_User $u) => str_ends_with($u->user_email, '@example.com')
);

8.4 之前这是 foreach 加提前 return,或者脆弱的 array_filter(...)[0] ?? null。现在一行搞定,几乎像自然语言。

4. #[\Deprecated] 属性

把一个辅助函数标记为已弃用,终于有了语言层的支持:

#[\Deprecated(message: '请改用 Theme::getPalette()', since: '2.0')]
function themescorners_get_colors(): array { /* ... */ }

它会真正抛出 E_USER_DEPRECATED 通知,IDE 能识别,并能配合 wp_debug_log() 工作。每次修改公开 API 时都用上它——下游的主题用户会感谢你。

升级清单

如果你是主题或插件作者,要把最低要求提到 PHP 8.4:

  1. 更新 composer.json"php": "^8.4"
  2. 更新 style.css 或插件主文件中的 Requires PHP 头。
  3. 运行 composer require --dev rector/rector,应用 PHP 8.4 规则集——上面提到的很多变更会自动改写。
  4. 在 CI 里用 8.4 跑一遍 PHPUnit 再发布;PHPUnit 11 已加入对应支持。
  5. "Tested up to" 提到当前的 WordPress 版本。撰文时,WordPress 6.8(2026 年 4 月)是稳妥目标。

关于主机

几乎所有托管型 WordPress 主机(Kinsta、WP Engine、Pressable、Cloudways、SiteGround)现在都提供 PHP 8.4,且支持一键切换。如果你的主机在 2026 年还停留在 8.1 或 8.2——换主机。在我们针对真实 WordPress 负载的基准测试里,8.1 与 8.4 之间的性能差距稳定在 8–12%。

相关文章