如何迭代枚举类型

11

我想要遍历枚举:

enum Shapes
{
    case RECTANGLE;
    case SQUARE;
    case CIRCLE;
    case OVAL;
}

如果我这样做,会得到 Shapes常量未定义的错误:

foreach (Shapes as $shape) { }

我想到的最好解决方案是手动创建枚举数组:
$shapes = [
    Shapes::RECTANGLE,
    Shapes::SQUARE,
    Shapes::CIRCLE,
    Shapes::OVAL,
];
foreach ($shapes as $shape) { }

有没有更好的方式遍历枚举?

2个回答

30
可以使用cases()在枚举上生成一个案例列表,如下所示:
enum Shapes
{
    case RECTANGLE;
    case SQUARE;
    case CIRCLE;
    case OVAL;
}

foreach (Shapes::cases() as $shape) { 
    echo $shape->name . "\n";
}

这的输出结果是:
RECTANGLE
SQUARE
CIRCLE
OVAL

适用于 PHP 8.1 及更高版本。

参见:PHP Fiddle


5
您可以尝试使用Shapes::cases(),它会返回给定枚举的所有情况的数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接