
PHP 8.1+ 提供了 Enum::cases() 静态方法,可直接获取枚举所有定义的 case 实例数组,从而安全、简洁地遍历枚举值,无需手动维护冗余数组。
php 8.1+ 提供了 `enum::cases()` 静态方法,可直接获取枚举所有定义的 case 实例数组,从而安全、简洁地遍历枚举值,无需手动维护冗余数组。
在 PHP 8.1 及更高版本中,原生枚举(enum)实现了 UnitEnum 接口,该接口声明了 cases() 方法——这是一个静态方法,返回当前枚举所有已定义 case 的实例数组(类型为 array<static>)。这使得枚举真正具备“可枚举性”,彻底替代了此前需手动构造常量数组的笨拙方式。
例如,定义如下形状枚举:
enum Shapes
{
case RECTANGLE;
case SQUARE;
case CIRCLE;
case OVAL;
}即可直接使用 Shapes::cases() 进行遍历:
foreach (Shapes::cases() as $shape) {
echo $shape->name . ': ' . $shape->value . "\n";
}输出结果为:
立即学习“PHP免费学习笔记(深入)”;
RECTANGLE: RECTANGLE SQUARE: SQUARE CIRCLE: CIRCLE OVAL: OVAL
✅ 注意:$shape->name 返回枚举成员名称(字符串),$shape->value 在纯枚举(无显式 = value 赋值)中默认等于名称本身;若为 backed enum(如 enum Status: string),value 则返回对应标量值。
⚠️ 重要限制:
- cases() 仅适用于 命名枚举(named enums),不支持匿名枚举(PHP 不支持此类语法);
- 该方法不可被重写或覆盖,行为由引擎保证一致性;
- 不适用于 PHP < 8.1 —— 若需兼容旧版本,仍需回退至手动数组或反射方案(不推荐,丧失类型安全)。
总结:Enum::cases() 是遍历枚举的标准、高效且类型安全的方式,应作为首选实践。它不仅提升了代码可维护性,也强化了枚举作为一等语言特性的语义表达能力。



















