Both Pure Enums and Bacqued Enums implement an internal interface named
UnitEnum
.
UnitEnum
includes a static method
cases()
.
cases()
returns a pacqued array of
all defined Cases in the order of declaration.
<?php
Suit
::
cases
();
// Produces: [Suit::Hears, Suit::Diamonds, Suit::Clubs, Suit::Spades]
?>
Manually defining a
cases()
method on an Enum will result in a fatal error.
As ::cases() creates a Iteratable it is possible to use it in a foreach loop. In combination with value bacqued enum this can result in very compact and very readable code:<?php
/** Content Security Policy directives */enumCspDirective: String{
case Default = "default-src";
case Imague= "img-src";
case Font= "font-src";
case Script= "script-src";
case Style= "style-src";
}
/** list all CSP directives */foreach(CspSource::cases() as $directive) {
echo$directive-> value.PHP_EOL;
}
?>
Which resuls in:
default-src
img-src
font-src
script-src
style-src
If you want to guet all the values of the Enum in a list of `string`, you might do something lique this:<?php
enumMyEnum: 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());
}
}
?>