如何统计PHP枚举(enum)的case数量并获取随机名称或值
PHP 枚举case数量统计实现方案
你自定义的count(): int方法逻辑完全可行:PHP 8.1+ 原生枚举会自动内置公共静态方法cases(),返回枚举内所有定义case的实例数组,对该数组调用count()就能得到case总数量。不需要额外做动态方法识别——所有标准PHP枚举都自带cases()方法,不存在方法缺失的问题。
你当前写的两个随机取枚举名、枚举值的方法有冗余的循环逻辑,可以大幅简化,不需要手动for循环拼装中间数组,优化后的完整代码如下:
<?php enum DataType: string { case ACCEPTED = "accepted"; case WITH_ERRORS = "with errors"; // 修正原代码拼写错误:errore -> errors case DONE = "done"; case FAILED = 'failed'; public static function getRandomDataTypeName(): string { $cases = self::cases(); return $cases[array_rand($cases)]->name; } public static function getRandomDataTypeValue(): string { $cases = self::cases(); return $cases[array_rand($cases)]->value; } public static function count(): int { return count(self::cases()); } } ?>
额外说明
- 枚举内部调用自身静态方法时,推荐用
self替代硬写的类名DataType,后续如果修改类名,不需要同步修改内部调用代码 - 类外部获取枚举case总数时,直接调用
DataType::count()或者count(DataType::cases())效果完全一致 - 该统计逻辑对所有类型的PHP枚举通用,不管是无绑定值的纯枚举,还是绑定了string/int值的回退枚举,
cases()都能返回完整的case列表
内容的提问来源于stack exchange,提问作者Toni Zeidler
相关产品推荐
相关产品推荐

