PHPerKaigi 2024

Список значений

И чистые, и типизированные перечисления реализуют внутренний интерфейс с именем UnitEnum. Интерфейс UnitEnum включает статический метод cases(). Метод cases() возвращает упакованный массив всех определённых в перечислении вариантов в порядке объявления.

<?php

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

Ручное определение метода cases() в перечислении приведёт к фатальной ошибке.

add a note

User Contributed Notes 2 notes

up
18
theking2 at king dot ma
1 year 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
-11
ratsimbasitraka at gmail dot com
1 year ago
enum Priority {
case Left;
case Right;
}

// Does not work as default parameter
public function selectPriorities(array $priorities = Priority::cases()) {
Priority::cases() // works here
}
To Top