PHP 8.2 · 8.3 · 8.4 新特性速查表
PHP 8.4 / 8.3 / 8.2 新特性全景手册
🚀 PHP 8.4(2024-11 发布,生产可用)
1. 属性钩子(Property Hooks)
告别重复 getter/setter,语法级封装。
class User
{
private string $raw = '';
public string $name {
get { return ucfirst($this->raw); }
set(string $v) { $this->raw = strtolower($v); }
}
}
$u = new User();
$u->name = 'alice';
echo $u->name; // Alice
2. 不对称可见性(Asymmetric Visibility)
只读公开,内部可写。
class Config
{
public private(set) string $apiKey;
public function __construct(string $key) { $this->apiKey = $key; }
}
$c = new Config('123');
echo $c->apiKey; // OK
$c->apiKey = 'x'; // Error
3. 延迟对象(Lazy Objects)— 官方 ORM 基石
$ref = new ReflectionClass(Product::class);
$lazy = $ref->newLazyGhost(function ($obj) {
$obj->__construct(DB::find(1)); // 仅访问时触发
});
4. 新数组函数(array_* 家族补齐)
$nums = [1, 2, 3, 4];
$even = array_find($nums, fn($v) => $v % 2 === 0); // 2
$key = array_find_key($nums, fn($v) => $v > 3); // 3
5. JIT 改进
- IR 框架重构,CPU 分支预测更友好
- WordPress 6.6 实测 +7.8 % RPS(官方数据)
⚡ PHP 8.3(2023-11 发布)
1. json_validate() — 拒绝「假 JSON」
$bad = '{"name": "alice",}';
var_dump(json_validate($bad)); // false(节省 50 % 内存,无需抛异常)
2. #[\Override] — 覆写不再靠“眼神”
abstract class Job
{
abstract public function handle(): void;
}
class EmailJob extends Job
{
#[\Override]
public function handle(): void {} // 若父类改名,编译期直接报错
}
3. 类型化类常量
interface Cache
{
public const int TTL = 3600; // 实现类必须保持 int
}
4. 动态类常量 / Enum 获取
$name = 'VERSION';
echo PHP::{$name}; // 8.3.10
enum Status { case OK; }
$case = 'OK';
echo Status::{$case}->name; // OK
💎 PHP 8.2(2022-12 发布,当前主流 LTS 标配)
1. 只读类(Readonly Classes)
readonly class DTO
{
public function __construct(
public string $id,
public array $meta = []
) {}
}
// 整个类隐式只读,无需逐个声明属性
2. 敏感参数隐藏 #[\SensitiveParameter]
function login(
string $user,
#[\SensitiveParameter] string $pass
) {
throw new Exception('Error');
}
// 堆栈里 $pass 直接显示为 ❑
3. 新随机数引擎(Random\Engine)
use Random\Randomizer;
use Random\Engine\Xoshiro256StarStar;
$engine = new Xoshiro256StarStar(42);
$rand = new Randomizer($engine);
echo $rand->nextInt(); // 可重复、可单元测试
4. null / false / true 独立类型
function alwaysFail(): false
{
return false;
}
📈 一图看性能
版本 | WordPress 6.6 RPS* | Laravel 11 “Hello World” RPS* | 内存节省** |
---|---|---|---|
8.2 | 基准 100 % | 基准 100 % | — |
8.3 | +4.2 % | +5.5 % | json_validate 场景 −50 % |
8.4 | +7.8 % | +9.1 % | 延迟对象 −30 % ORM 内存 |
* 官方基准:PHP-FPM + OPcache + JIT,8 vCPU 3.2 GHz
** 对比相同负载下的峰值内存
🚦 升级红绿灯
- 8.2 → 8.3:100 % 向下兼容,可闭眼升
- 8.3 → 8.4:需检查
- 属性钩子与魔术方法 __get/__set 并存时,钩子优先(行为可能变化)
- codebase 若手工操作 readonly 属性,会触发“只写”可见性错误