Создать enum из имени в phpPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Создать enum из имени в php

Сообщение Anonymous »

В PHP 8.1 BackedEnum предлагает метод от и tryfrom для получения перечисления из значения. Как можно достичь такого же с помощью не поддерживаемых перечислений?

Код: Выделить всё

enum MainType: string
{
case Full = 'a';
case Major = 'b';
case Minor = 'c';
}

var_dump(MainType::tryFrom('a')); // MainType::Full
var_dump(MainType::tryFrom('d')); // null
Однако этого не существует для регулярных перечислений.

Код: Выделить всё

enum MainType
{
case Full;
case Major;
case Minor;
}

$name = (MainType::Full)->name
var_dump(name); // (string) Full
Один вариант, который я обнаружил, - это просто добавить функцию TryFromName , принятие строки и зацикливание по всем случаям, как это:
enum MainType
{
case Full;
case Major;
case Minor;

public static function tryFromName(string $name): ?static
{
foreach (static::cases() as $case) {
if ($case->name === $name) {
return $case;
}
}

return null;
}
}

$name = (MainType::Full)->name
var_dump(name); // (string) Full
var_dump(MainType::tryFromName($name)); // MainType::Full
< /code>
Это работает, однако он противоречит интуитивно понятно, чтобы включить цикл FOREACH, чтобы пройти все возможности, просто для создания перечисления. < /p>
Поэтому вопрос в Как правильный способ получить перечисление в PHP от имени.

Подробнее здесь: https://stackoverflow.com/questions/710 ... ame-in-php
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»