<?php
enum Gender
{
case UNKNOWN;
case MALE;
case FEMALE;
}
/**
* @template T as BackedEnum|UnitEnum
* @param class-string<T> $enumClass
* @param string $name
* @return T|null
*/
function tryFromName(string $enumClass, string $name)
{
$constName = $enumClass . '::' . $name;
return is_subclass_of($enumClass, UnitEnum::class) && defined($constName)
? constant($constName)
: null;
}
var_dump(tryFromName(Gender::class, 'UNKNOWN'));// enum(Gender::UNKNOWN)
var_dump(tryFromName(Gender::class, 'MALE'));// enum(Gender::MALE)
var_dump(tryFromName(Gender::class, 'FEMALE'));// enum(Gender::FEMALE)
var_dump(tryFromName(Gender::class, 'null'));// NULL
- Output for 8.1.23 - 8.1.33, 8.2.10 - 8.2.29, 8.3.5 - 8.3.26, 8.4.1 - 8.4.13
- enum(Gender::UNKNOWN)
enum(Gender::MALE)
enum(Gender::FEMALE)
NULL
- Output for 8.0.30
- Parse error: syntax error, unexpected identifier "Gender" in /in/8R2fP on line 3
Process exited with code 255. - Output for 7.2.7
- Parse error: syntax error, unexpected 'Gender' (T_STRING) in /in/8R2fP on line 3
Process exited with code 255.
preferences:
68.67 ms | 408 KiB | 5 Q