You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何正确遍历enum枚举类型?

PHP 枚举遍历的标准实现方式

PHP 8.1 版本新增的原生枚举,已经内置了获取所有枚举项的静态方法cases(),不需要手动维护枚举项数组,是官方推荐的规范实现。

你之前写foreach (Shapes as $shape)报错,是因为Shapes是枚举类型名,本身不是可迭代结构,必须通过cases()方法拿到所有枚举case的数组后再遍历。

正确写法

直接调用枚举类的cases()静态方法即可遍历,返回的数组顺序和你在枚举类中定义case的顺序完全一致:

foreach (Shapes::cases() as $shape) {
    // 这里的$shape就是对应的枚举对象,比如Shapes::RECTANGLE
    var_dump($shape);
}

适配场景

  • 普通无值枚举(也就是你定义的这类基础枚举)可以直接用
  • 绑定了int/string值的 backed 枚举(标量枚举)同样适用,遍历过程中可以通过$shape->value获取每个case绑定的标量值,示例:
// 带值的标量枚举示例
enum Shapes: string
{
    case RECTANGLE = 'rectangle';
    case SQUARE = 'square';
    case CIRCLE = 'circle';
    case OVAL = 'oval';
}

foreach (Shapes::cases() as $shape) {
    // 输出每个枚举绑定的字符串值
    echo $shape->value . PHP_EOL;
}

和手动写数组方案的对比

你之前手动维护枚举数组的方式,后续新增、删除、修改枚举case时,必须同步修改对应的数组配置,很容易出现枚举更新了但遍历数组没同步的bug。用原生cases()方法没有额外维护成本,枚举结构调整时遍历逻辑会自动适配,不会出现不一致问题。


内容的提问来源于stack exchange,提问作者ICE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 12:03:23