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中文网其他相关文章!