ICE*_*ICE 13 php enums php-8.1
我想迭代枚举:
enum Shapes
{
case RECTANGLE;
case SQUARE;
case CIRCLE;
case OVAL;
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我会得到Shapesconst not Defined:
foreach (Shapes as $shape) { }
Run Code Online (Sandbox Code Playgroud)
我提出的最佳解决方案是手动创建枚举数组:
$shapes = [
Shapes::RECTANGLE,
Shapes::SQUARE,
Shapes::CIRCLE,
Shapes::OVAL,
];
foreach ($shapes as $shape) { }
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来迭代枚举?
KIK*_*are 34
您可以使用case()在枚举上生成案例列表,如下所示:
enum Shapes
{
case RECTANGLE;
case SQUARE;
case CIRCLE;
case OVAL;
}
foreach (Shapes::cases() as $shape) {
echo $shape->name . "\n";
}
Run Code Online (Sandbox Code Playgroud)
其输出是:
RECTANGLE
SQUARE
CIRCLE
OVAL
Run Code Online (Sandbox Code Playgroud)
适用于 PHP 8.1 及更高版本。
请参阅:PHP 小提琴