PHP 上的枚舉
PHP 在版本 8.1 之前本身就缺乏枚舉,這使得儲存預定義值變得困難。一種流行的解決方案是使用常量,但它們遭受命名空間衝突問題和全域範圍的困擾。數組雖然不受命名空間衝突的影響,但缺乏類型安全性,並且容易發生運行時覆蓋。
PHP 8.1 中的本機列舉
自 PHP 8.1 以來,引入了本機列舉。它們提供了定義枚舉的簡潔語法:
enum DaysOfWeek: int { case Sunday = 0; case Monday = 1; // ... }
枚舉可用於類型安全常數和值驗證:
$today = DaysOfWeek::Sunday; if ($today === DaysOfWeek::Monday) { // ... }
PHP 8.0 及更早版本的解法
PHP 8.1之前,流行的解決方法包括:
abstract class DaysOfWeek { const Sunday = 0; const Monday = 1; // ... }
abstract class BasicEnum {} abstract class DaysOfWeek extends BasicEnum { const Sunday = 0; const Monday = 1; // ... }
使用這些類,可以進行值驗證:
if (DaysOfWeek::isValidName('Monday')) { // ... }
其他選項
結論
隨著 PHP 8.1 中引入本機枚舉,使用預定義值變得更容易、更強大。然而,即使對於較舊的 PHP 版本,也有有效的解決方法可以提供類似枚舉的功能。
以上是PHP 中的枚舉是如何演變的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!