PHP 8.0 至 8.5 所有核心新语法与特性的完整汇总
截至 2026 年 4 月,PHP 的最新稳定版本为 8.5(2025 年底发布),而下一个版本 8.6 仍在开发中。
以下是 PHP 8.0 至 8.5 所有核心新语法与特性的完整汇[文]总,按版本由新到旧排序。
一、PHP 8.5 最新语法(2025)
1. 管道运算符 |>
彻底解决函数嵌套的 “括号地狱”,支持从左到右链式调用。
// 旧版 (嵌套)$result = strtolower(str_replace(' ', '-', "Hello World"));// PHP 8.5 (管道)$result = "Hello World" |> str_replace(' ', '-', ...) |> strtolower(...);// 输出: hello-world2. 常量表达式支持闭包
可在常量、注解、默认值中直接使用闭包。
// 类常量中使用闭包class Math { const MULTIPLY = fn($a, $b) => $a * $b;}echo Math::MULTIPLY(2, 3); // 63. #[\NoDiscard] 注解
#[\NoDiscard]function calculate(): int { return 100; }calculate(); // ❌ 报错: 返回值未使用(void) calculate(); // ✅ 显式忽略,不报错4. (void) 显式转换
专门用于忽略 NoDiscard 函数的返回值。
二、PHP 8.4 核心语法(2024)
1. 属性钩子 (Property Hooks)
最大 OOP 革新:直接在属性上写 get/set,告别 Getter/Setter。
class User { public function __construct( private string $name ) {} // 钩子: 读取时自动转大写 public string $name { get { return strtoupper($this->name); } set { $this->name = trim($value); } }}$user = new User("alice");echo $user->name; // ALICE (自动触发get)2. 非对称可见性
独立控制读 / 写权限(如:public 读、private 写)。
class Config { // 外部可读, 不可写 public private(set) string $version = "1.0";}$config = new Config();echo $config->version; // ✅ 1.0$config->version = "2.0"; // ❌ 错误3. #[Deprecated] 原生注解
标记函数 / 类已废弃。
#[Deprecated("Use newFunc() instead")]function oldFunc() {}三、PHP 8.3 语法亮点(2023)
1. 类型化类常量
常量强制类型,子类重写必须兼容。
class API { // 明确常量为字符串类型 public const string VERSION = "v1";}2. 动态常量访问
class Status { const ACTIVE = 1;}$key = "ACTIVE";echo Status::{$key}; // 13. json_validate()
原生验证 JSON 字符串。
if (json_validate($jsonString)) { ... }四、PHP 8.0–8.2 经典语法(现代 PHP 基础)
1. match 表达式
加强版 switch:无 break、可返回值、严格比较。
$result = match ($status) { 1 => "Active", 2, 3 => "Pending", default => "Unknown"};```{insert\_element\_0\_}#### 2. **Nullsafe 运算符 `?->`**链式调用**自动防null**,避免层层 `isset()`。```php// 旧版$country = $user?->getAddress()?->getCountry();// PHP 8.0+$country = $user?->getAddress()?->country;```{insert\_element\_1\_}#### 3. **构造器属性提升****一行完成**声明+赋值,减少样板代码。```php// 旧版class User { public string $name; public int $age; public function __construct(string $name, int $age) { $this->name = $name; $this->age = $age; }}// PHP 8.0+class User { public function __construct( public string $name, public int $age ) {}}```{insert\_element\_2\_}#### 4. **联合类型 `A|B`**参数/返回值**允许多种类型**。```phpfunction getId(int|string $id): int|string { ... }5. 命名参数
按名称传参,顺序无关、可读性强。
// 无视参数顺序createUser( name: "Bob", age: 30, active: true);```{insert\_element\_3\_}#### 6. **只读属性 `readonly`****初始化后不可修改**。```phpclass Order { public readonly string $orderNo;}五、版本速览(2026)
PHP 8.5:管道运算符、常量闭包[章]、NoDiscard
PHP 8.4:属性钩子、非对称可见[来]性
PHP 8.3:类型化常量、json[自]_validate
PHP 8.0–8.2:match、[一]nullsafe、构造器提升[道]、联合类型
六、升级建议
新项目:直接使用 8.5,体验管道 + 属性钩子。
旧项目:优先升级到 8.2+,启用类型 + JIT,性能与安全性大幅提升[,]。