我有以下示例代码:
<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}
$enumClass = '\Suit';
$hearts = $enumClass::from('H');
var_dump($hearts);
Run Code Online (Sandbox Code Playgroud)
它产生输出
enum(Suit::Hearts)
Run Code Online (Sandbox Code Playgroud)
这是所期望的。但是,有没有办法使用一些函数调用而不是动态来做到这一点$enumClass::from('H');?诸如此类get_enum($enumClass)::from('H')还是那样?
PHP 枚举是对象,可以通过自动加载来确定。因此,如果你的变量只包含枚举的名称,你可以先检查枚举是否存在,然后使用BackedEnum::tryFrom()orBackedEnum::from()来获取它。
<?php
declare(strict_types=1);
namespace Marcel\Enums;
enum Status: string
{
case Active = 'active';
case Retired = 'retired';
}
$fqcn = Status::class;
$enum = null;
$value = 'active';
if (enum_exists($fqcn)) {
$enum = $fqcn::from($value);
}
Run Code Online (Sandbox Code Playgroud)
没有额外的功能可以先获取对象,然后执行该对象的某些方法。您可以获取完全限定的类名get_class(),并在下一步中检查该类(枚举)是否存在,并作为最后一步调用该BackedEnum::from()方法。