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
相关产品推荐
相关产品推荐

