PHP 8.3 vs PHP 8.4 開發者完整對比指南
PHP 8.3 vs PHP 8.4 開發者完整對比指南
PHP 8.4 正式發布已有一段時間,它帶來了一系列現代化功能,旨在讓你的代碼更簡潔、更安全、更高效。無論你仍在使用 PHP 8.3 還是在考慮重構技術棧,現在都應該了解這兩個版本的差異以及可以立即利用的變化。
本文將深入探討 PHP 8.3 和 PHP 8.4 之間的關鍵差異、對開發者的意義,以及如何規劃遷移。
PHP 8.4 的新特性
PHP 8.4 于 2024 年 11 月發布,在 8.3 的堅實基礎上進一步推進,帶來了顯著的語言增強。
PHP 8.3 回顧
在深入新功能之前,讓我們回顧一下 PHP 8.3 帶來的特性:
類型化類常量:允許為 const 聲明類型,增強一致性并提早捕獲錯誤。
<?php
class Status {
public const int CODE = 200;
}
json_validate() 函數:輕量級 JSON 驗證,無解析開銷。
動態屬性棄用:訪問未聲明屬性會拋出警告,這是向更好的對象建模邁出的重要一步。
JIT 小幅改進:PHP 8.3 帶來了小幅運行時性能提升,主要集中在內部性能調優。
PHP 8.4 的新增功能
只讀類
將整個類聲明為不可變的。一旦構造完成,就無法修改其屬性。
<?php
readonly class Config {
public string $env;
public int $timeout;
}
重要意義:在值對象、DTO 和配置中強制數據完整性。
屬性鉤子
PHP 現在允許在屬性內定義內聯的 get 和 set 邏輯 — 終于實現了!
<?php
class User {
public string $name {
get => $this->firstName . ' ' . $this->lastName;
set => [$this->firstName, $this->lastName] = explode(' ', $value, 2);
}
}
重要意義:簡化封裝,無需樣板 getter/setter 方法。
非對稱可見性
分別控制屬性的讀寫訪問權限。
<?php
class Post {
public private(set) string $slug;
}
重要意義:適用于使某些值從外部不可變但內部可修改的場景。
惰性對象支持
延遲對象初始化直到絕對必要時。
<?php
$object = (new ReflectionClass(MyService::class))
->newLazyProxy(fn() => new MyService());
重要意義:加速大型應用的啟動過程,提高 DI 容器效率。
DOM HTML5 支持
PHP 的 DOM 擴展現在支持正確的 HTML5 解析:
<?php
$html = Dom\HTMLDocument::createFromString('<section>Hello!</section>');
重要意義:現代 HTML 解析變得更加可靠和符合規范。
無括號方法鏈
new 之后的更簡潔鏈式調用:
<?php
$user = new User()->setName("John")->activate();
重要意義:語法糖,讓流暢接口感覺更現代。
新數組函數
PHP 8.4 引入了 array_find()、array_any()、array_all() 和 array_find_key():
<?php
$result = array_find([1, 2, 3], fn($n) => $n > 1); // 2
重要意義:更簡潔的函數式數組操作。
隱式可空類型棄用
這種寫法現在會觸發棄用警告:
<?php
function greet(string $name = null) {} // ?
function greet(?string $name = null) {} // ?
重要意義:推動開發者編寫顯式和類型安全的代碼。
性能基準測試
PHP 8.4 帶來了顯著的 JIT 和內存效率改進:
- 更快的對象創建和方法調用
- 更緊湊的操作碼
- 更好地處理懶加載和大量自動加載的環境
基準測試顯示,在實際場景中比 PHP 8.3 有 5-10% 的性能提升。
是否應該升級?
建議升級的情況:
- 構建全新應用程序
- 希望更強的不可變性和更簡潔的屬性訪問
- 使用枚舉、DTO 或大型服務容器
- 性能很重要
建議等待的情況:
- 嚴重依賴使用舊模式的老庫
- 代碼庫中有很多沒有
?的 default-null 參數
遷移建議
- 使用
php -d deprecated_functions=1提早檢測和修復問題 - 在代碼庫中啟用嚴格類型以利用 8.4 的保護措施
- 在適用的地方將 DTO 和值對象重構為
readonly class - 更新測試套件和 CI 以在 PHP 8.4 上運行
總結
PHP 8.4 是迄今為止最開發者友好的版本之一。通過新的語法糖、不可變性支持和運行時效率,它清楚地表明 PHP 正在發展成為一種現代、類型化和可維護的語言。
如果你在使用 PHP 8.3,升級的風險很小 — 但在開發者體驗方面的提升卻是巨大的。

浙公網安備 33010602011771號