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

如何统计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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:57:30