PHP8+,早已不再是你记忆中的样子
JIT 编译器 (Just-In-Time)
是 PHP8 最受关注的特性。它改变了 PHP 脚本的运行逻辑
- 原理:传统的 PHP 流程是
PHP代码->Opcode->虚拟机执行。JIT 介入后,会将高频触发的 Opcode 直接编译为机器码 (x86/arm64),绕过虚拟机直接由 CPU 执行 - 核心收益:对 CPU 密集型计算(如数学计算、图像处理)有显著提升,但对常规 Web 应用(IO 密集型)提升较小
- 关键词:opcache.jit_buffer_size
opcache.enable=1
opcache.jit_buffer_size=100M # 分配给机器码的内存
opcache.jit=tracing # 推荐模式,跟踪热点代码
类型系统与语法的进化
联合类型 (Union Types)
不再需要用 @param 注释来标注多种可能的类型
// PHP 8 之前
function process($data) { /* ... */ }
// PHP 8
function process(string|int|array $data): int|float {
return 1.0;
}
构造器属性提升 (Constructor Property Promotion)
大幅减少重复代码
// 之前需要声明属性、参数、赋值三步
class User {
public function __construct(
public string $name,
public int $age,
) {}
}
Match 表达式
比 switch 更严格(严格等值检查)、更简洁,且有返回值
$status = match($code) {
200, 300 => 'success',
400 => 'error',
default => 'unknown',
};
安全与容错的提升
Nullsafe 运算符 (?->)
优雅地处理嵌套调用中的 Null 值,告别一层层的 if (isset(...))
// 之前
$country = $session->user !== null ? $session->user->getAddress()->country : null;
// 现在
$country = $session->user?->getAddress()?->country;
具名参数 (Named Arguments)
传参时指定参数名,跳过可选参数,代码可读性极强
array_fill(start_index: 0, count: 100, value: 50);
注解 (Attributes)
替代了原来不规范的 Docblock(文档注释),让代码逻辑可以被结构化地解析
#[Route("/api/user", methods: ["GET"])]
class UserController { ... }
Enums (枚举)
enum Status: string {
case Draft = 'draft';
case Published = 'published';
case Archived = 'archived';
// 还可以定义方法
public function label(): string {
return match($this) {
self::Draft => '草稿',
self::Published => '已发布',
self::Archived => '已归档',
};
}
}
function updateStatus(Status $status) { /* 类型约束极其严格 */ }
Readonly (只读属性/类)
readonly 保证属性只能被初始化一次,之后无法修改。包括 Readonly Classes,让整个类变成不可变的
// PHP 8.2 只读类
readonly class PostData {
public function __construct(
public string $title,
public string $author,
) {}
}
$post = new PostData('PHP8特性', 'Gemini');
// $post->title = '改不动'; // 直接抛出致命错误
类型化类常量 (Typed Class Constants)
显式定义常量类型
class Config {
public const string VERSION = '1.0.0';
public const int MAX_RETRIES = 5;
}
本文来自博客园,作者:我已有个她,转载请注明原文链接:https://www.cnblogs.com/gitgud/p/19992389
浙公网安备 33010602011771号