如何从EmployeePosition枚举文件中检索职位名称?
PHP枚举EmployeePosition的检索方法
你当前的EmployeePosition枚举已经实现了一个基础的名称检索方法,但还有更规范、健壮的实现方式,以下是几种可行方案:
1. 优化现有检索方法
可以给现有方法增加合法性校验,避免传入不存在的职位名称时出错:
enum EmployeePosition:int { case Manager = 1; case Officer = 2; case Executive = 3; case Worker = 4; public static function getByName(string $name): ?self { if (!defined("self::$name")) { return null; } return constant("self::$name"); } } // 使用示例 $position = EmployeePosition::getByName('Manager'); var_dump($position); // 输出:enum(EmployeePosition::Manager)
2. 基于原生枚举方法实现名称检索
PHP 8.1+的枚举自带cases()方法,可以遍历所有枚举项来匹配名称:
enum EmployeePosition:int { case Manager = 1; case Officer = 2; case Executive = 3; case Worker = 4; public static function findByName(string $name): ?self { foreach (self::cases() as $case) { if ($case->name === $name) { return $case; } } return null; } } // 使用示例 $position = EmployeePosition::findByName('Officer'); var_dump($position); // 输出:enum(EmployeePosition::Officer)
3. 抛出异常处理无效名称
如果希望遇到不存在的职位名称时主动抛出异常,而非返回null,可以调整方法逻辑:
public static function findByName(string $name): self { foreach (self::cases() as $case) { if ($case->name === $name) { return $case; } } throw new InvalidArgumentException("不存在名为{$name}的职位"); }
内容的提问来源于stack exchange,提问作者mahbub
相关产品推荐
相关产品推荐

