Стандартное перечисление (enum) в PHP8 предлагает статический метод cases()
, возвращающий массив элементов типа enum
. Однако, иногда при решении задач требуется массив именно значений (int
или string
в зависимости от характера нашего Backed Enum), поэтому для таких случаев в наш энам мы можем добавить статический метод.
Способ для ванильного PHP
Почему лучше написать так? Всё просто — при смене фреймворка нам не придётся мучаться и переписывать реализацию, так как она будет поддерживаться для любого приложения на PHP. Ниже сигнатура и реализация метода:
public static function values(): array
{
return array_column(static::cases(), 'value');
}
Предполагается линейная временная сложность на этом методе, то есть, , где — количество значений в перечислении.
Способ для Laravel-приложений
В данном случае можно использовать коллекции (класс \Illuminate\Support\Collection
) через хелпер collect
:
public static function values(): array
{
return collect(static::cases())->pluck('value')->toArray();
}