Бписок Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

И чистыС, ΠΈ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ пСрСчислСния Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ интСрфСйс с ΠΈΠΌΠ΅Π½Π΅ΠΌ UnitEnum. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ UnitEnum Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ cases(). ΠœΠ΅Ρ‚ΠΎΠ΄ cases() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ массив Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² пСрСчислСнии. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² порядкС объявлСния.

<?php

enum Suit
{
case
Hearts;
case
Diamonds;
case
Clubs;
case
Spades;
}

var_dump(Suit::cases());

enum
SuitBacked: string
{
case
Hearts = 'H';
case
Diamonds = 'D';
case
Clubs = 'C';
case
Spades = 'S';
}

var_dump(SuitBacked::cases());

Π ΡƒΡ‡Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° cases() Π² пСрСчислСнии ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ошибкС.

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 2 notes

up
28
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-src
img-src
font-src
script-src
style-src
up
9
anhaia dot gabriel at gmail dot com ΒΆ
1 year 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());
    }
}

?>