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_find、array_find_key、array_any 与 array_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:
- 更新
composer.json:"php": "^8.4"。 - 更新
style.css或插件主文件中的Requires PHP头。 - 运行
composer require --dev rector/rector,应用 PHP 8.4 规则集——上面提到的很多变更会自动改写。 - 在 CI 里用 8.4 跑一遍 PHPUnit 再发布;PHPUnit 11 已加入对应支持。
- 把
"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%。