按存储在 PHP 中的字符串中的名称获取枚举值

Get enum value by name stored in a string in PHP

我想通过名称获取 PHP 中枚举的值。 我的枚举是这样的:

enum Status : int
{
    case ACTIVE = 1;
    case REVIEWED = 2;
    // ...
}

Status::from(2) 可用于获取 "REVIEWED",但如何从存储在字符串中的名称解析值?

嗯,看来PHP中没有任何built-in解。我用自定义函数解决了这个问题:

enum Status : int
{
    case ACTIVE = 1;
    case REVIEWED = 2;
    // ...

    public static function fromName(string $name): string
    {
        foreach (self::cases() as $status) {
            if( $name === $status->name ){
                return $status->value;
            }
        }
        throw new \ValueError("$name is not a valid backing value for enum " . self::class );
    }

}

然后,我简单地使用 Status::fromName('ACTIVE') 并得到 1

如果你想模仿fromtryFrom枚举函数,你还可以添加:

public static function tryFromName(string $name): string|null
{
    try {
        return self::fromName($name);
    } catch (\ValueError $error) {
        return null;
    }
}

要从名称中获取值:

enum Status : int
{
   case ACTIVE = 1;
   case REVIEWED = 2;
   // ...
}

print(Status::REVIEWED->value);

Enum documentation