You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:31:06