Liste mit Werten

Sowohl Pure Enums als auch Backed Enums implementieren eine interne Schnittstelle namens UnitEnum. UnitEnum enthält die statische Methode cases(). cases() gibt ein gepacktes Array mit allen definierten Fällen in der Reihenfolge zurück, in der sie deklariert wurden.

<?php

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

Die manuelle Definition der Methode cases() führt bei einer Enum zu einem fatalen Fehler.

add a note

User Contributed Notes 2 notes

up
23
theking2 at king dot ma
3 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-srcimg-srcfont-srcscript-srcstyle-src
up
0
anhaia dot gabriel at gmail dot com
11 months ago
If you want to get all the values of the Enum in a list of `string`, you might do something like this:<?phpenum 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