$reflection = new ReflectionEnumBackedCase(Status::class, 'REVIEWED');
$reflection->getBackingValue(); // 2
$reflection->getValue() // Status::REVIEWED if you need case object
或枚举反思:
$reflection = new ReflectionEnum(Status::class);
$reflection->getCase('REVIEWED')->getValue()->value // 2
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 );
}
}
5条答案
按热度按时间dfty9e191#
您可以对Backed case使用反射:
或枚举反思:
另请参阅反射枚举单元格
7nbnzgx92#
好吧,PHP中似乎没有任何内置的解决方案。我用一个自定义函数解决了这个问题:
然后,我只需使用
Status::fromName('ACTIVE')
并得到1
如果要模拟
from
和tryFrom
枚举函数,还可以添加:wydwbb8l3#
要从名称获取值:
Enum documentation
gojuced74#
我也使用了一个自定义方法,但是我返回了一个枚举。from 方法返回的是一个枚举,而不是一个值。我认为 fromName 方法也应该返回一个枚举。这样你就可以访问枚举的所有方法。你不需要使用另一个方法- from。
7z5jn7bk5#
constant()函数可以使用字符串变量返回常量的值。
这也适用于PHP手册的基本枚举部分中提到的枚举类常量。