2024 年日本 PHP 研討會

值列表

純列舉 (Pure Enum) 和支援值列舉 (Backed Enum) 都實作了一個名為 UnitEnum 的內部介面。UnitEnum 包含一個靜態方法 cases()cases() 會以宣告的順序返回一個包含所有已定義案例的打包陣列。

<?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 個月前
如果您想將列舉的所有值放入字串列表中,您可以這樣做:

<?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