
PHP 8.1+ 提供了 Enum::cases() 静态方法,可直接获取枚举所有枚举项的数组,从而安全、简洁地实现遍历,无需手动维护常量列表。
php 8.1+ 提供了 `enum::cases()` 静态方法,可直接获取枚举所有枚举项的数组,从而安全、简洁地实现遍历,无需手动维护常量列表。
在 PHP 8.1 及更高版本中,原生枚举(enum)实现了 UnitEnum 接口,该接口定义了 cases() 方法——它会静态返回当前枚举所有已声明 case 的实例数组,顺序与定义顺序一致。这是官方推荐、类型安全且零维护成本的标准方案。
以下是一个完整示例:
enum Shapes
{
case RECTANGLE;
case SQUARE;
case CIRCLE;
case OVAL;
}
// ✅ 正确:使用 cases() 获取所有枚举项
foreach (Shapes::cases() as $shape) {
echo $shape->name . ': ' . $shape->value . "\n";
}
输出结果为:
RECTANGLE: SQUARE: CIRCLE: OVAL:
? 注意:$shape->name 返回枚举项名称(如 'RECTANGLE'),而 $shape->value 在纯枚举(无标量值)中默认为空字符串;若定义为 case CIRCLE = 'circle';,则 value 将返回对应标量值。
相比手动构造数组(如 [$shape::RECTANGLE, ...]),cases() 具有显著优势:
- ✅ 自动同步:新增/删除 case 后无需修改遍历逻辑;
- ✅ 类型安全:返回 Shapes[],IDE 和静态分析工具可准确推导类型;
- ✅ 性能可靠:底层由 Zend 引擎优化,开销极小;
- ❌ 不适用于 PHP
总结:只要运行环境支持 PHP 8.1+,应始终优先使用 Enum::cases() 进行枚举遍历——它是语义清晰、健壮且符合语言设计哲学的标准实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











