PHP Conference Japan 2024

值列表

纯枚举和支持枚举都实现了一个名为 UnitEnum 的内部接口。UnitEnum 包含一个静态方法 cases()cases() 返回一个按声明顺序打包的所有已定义 Case 的数组。

<?php

Suit
::cases();
// 输出:[Suit::Hearts, Suit::Diamonds, Suit::Clubs, Suit::Spades]
?>

在枚举上手动定义 cases() 方法会导致致命错误。

添加注释

用户贡献的注释 2 条注释

theking2 at king dot ma
2 年前
由于 ::cases() 创建了一个可迭代对象,因此可以在 foreach 循环中使用它。结合支持枚举,这可以产生非常紧凑且易读的代码

<?php
/** 内容安全策略指令 */
enum CspDirective: String {
case Default =
"default-src";
case
Image = "img-src";
case
Font = "font-src";
case
Script = "script-src";
case
Style = "style-src";
}

/** 列出所有 CSP 指令 */
foreach( CspSource::cases() as $directive ) {
echo
$directive-> value . PHP_EOL;
}
?>
结果为
default-src
img-src
font-src
script-src
style-src
anhaia dot gabriel at gmail dot com
3 个月前
如果要以 `string` 列表的形式获取枚举的所有值,可以执行以下操作

<?php

enum MyEnum: string
{
case
OPTION_A = 'option_a';
case
OPTION_B = 'option_b';
case
OPTION_C = 'option_c';

public static function
values(): array
{
return
array_map(fn ($case) => $case->value, self::cases());
}
}

?>
To Top