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

PHP 8枚举能否作为函数参数?如何传入整个UserRole枚举?

正确传递枚举到translateEnum函数的方式

在PHP 8.1+的枚举体系中,要将整个枚举的所有实例传入函数,不能直接传枚举类名(UserRole)或类字符串(UserRole::class),因为这两个都不是枚举实例的集合。正确的做法是调用枚举的静态方法cases(),它会返回该枚举所有实例的数组,这才是translateEnum函数需要处理的对象。

示例代码

// 假设你的translateEnum函数签名如下
function translateEnum(array $enumCases): array {
    $translations = [];
    foreach ($enumCases as $case) {
        // 基于TranslatableInterface的翻译方法获取文本
        $translations[$case->value] = $case->getTranslation();
    }
    return $translations;
}

// 正确调用方式
$roleTranslations = translateEnum(UserRole::cases());

关键说明

  • UserRole::cases()是PHP枚举内置的静态方法,会返回包含该枚举所有实例的数组,这是函数能处理的有效输入。
  • 直接传递UserRole(类名)或UserRole::class(类字符串标识)时,函数无法遍历枚举实例,自然无法生成翻译数组。

内容的提问来源于stack exchange,提问作者gremo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:09:59