Добавлю способы
enum Dire: string {
case Left = 'Left';
case Right = 'Right';
}
$string = 'Left';
$const = Dire::class . '::' . $string;
$var = defined($const) ? constant($const) : null;
var_dump($var); // enum(Dire::Left)
enum Dire: string {
case Left = 'Left';
case Right = 'Right';
public static function tryFromName(string $name): ?self
{
foreach (self::cases() as $case) {
if ($case->name === $name) {
return $case;
}
}
return null;
}
}
$string = 'Left';
$var = Dire::tryFromName($string);
var_dump($var); // enum(Dire::Left)
Ну и через рефлексию
enum Dire: string {
case Left = 'Left';
case Right = 'Right';
}
$string = 'Left';
$refEnum = new ReflectionEnum(Dire::class);
$var = $refEnum->hasCase($string) ? $refEnum->getConstant($string) : null;
var_dump($var); // enum(Dire::Left)