Listando valores

Tanto los Enums Puros como los Enums Respaldados implementan una interfaz interna llamada UnitEnum. UnitEnum incluye un método estático cases(). cases() devuelve un array empaquetado de todos los Casos definidos en el orden de declaración.

<?php

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

Definiar manualmente el método cases() en una enumeración causará en un error fatal.

add a note

User Contributed Notes 2 notes

up
23
theking2 at king dot ma
2 years ago
As ::cases() creates a Iteratable it is possible to use it in a foreach loop. In combination with value backed enum this can result in very compact and very readable code:

<?php
/** Content Security Policy directives */
enum CspDirective: String {
case Default =
"default-src";
case
Image = "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 results in:
default-src
img-src
font-src
script-src
style-src
up
0
anhaia dot gabriel at gmail dot com
6 months ago
If you want to get all the values of the Enum in a list of `string`, you might do something like this:

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