
在 PHP 8.1 中引入了枚举(Enumerations)功能,它提供了一种定义类型安全且有限值集合的方式。 在实际应用中,经常需要获取枚举的所有可能值。 本文将详细介绍如何在 PHP 中获取枚举的所有值,包括基本枚举和带有关联值的枚举。
获取基本枚举的值
对于不带有关联值的基本枚举,可以使用 cases() 方法获取所有枚举成员的数组,然后使用 array_column() 函数提取每个成员的名称。
enum Status{ case Pending; case Active; case Inactive;}$statuses = array_column(Status::cases(), 'name');print_r($statuses);// Output:// Array// (// [0] => Pending// [1] => Active// [2] => Inactive// )
在这个例子中,Status::cases() 返回一个包含 Pending, Active, 和 Inactive 枚举成员的数组。 array_column() 函数提取每个成员的 name 属性,最终得到一个包含枚举名称的数组。
获取带有关联值的枚举的值
对于带有关联值的枚举(Backed Enums),除了名称,还可以获取每个成员关联的值。 同样可以使用 cases() 方法获取所有枚举成员的数组,然后使用 array_column() 函数提取每个成员的 value 属性。
立即学习“PHP免费学习笔记(深入)”;
enum Suit: string{ case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S';}$suits = array_column(Suit::cases(), 'value');print_r($suits);// Output:// Array// (// [0] => H// [1] => D// [2] => C// [3] => S// )
在这个例子中,Suit::cases() 返回一个包含 Hearts, Diamonds, Clubs, 和 Spades 枚举成员的数组。 array_column() 函数提取每个成员的 value 属性,最终得到一个包含枚举值的数组。
使用 Trait 简化枚举操作
为了更方便地操作枚举,可以创建一个 trait,其中包含获取枚举名称和值的静态方法,以及将枚举转换为关联数组的方法。
trait EnumToArray{ public static function names(): array { return array_column(self::cases(), 'name'); } public static function values(): array { return array_column(self::cases(), 'value'); } public static function array(): array { return array_combine(self::values(), self::names()); }}enum Suit: string{ use EnumToArray; case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S';}$suitArray = Suit::array();print_r($suitArray);// Output:// Array// (// [H] => Hearts// [D] => Diamonds// [C] => Clubs// [S] => Spades// )
在这个例子中,EnumToArray trait 包含了 names(), values(), 和 array() 三个静态方法。 names() 方法返回包含枚举名称的数组,values() 方法返回包含枚举值的数组,array() 方法返回一个关联数组,其中键是枚举值,值是枚举名称。
总结
通过使用 cases() 方法和 array_column() 函数,可以轻松地获取 PHP 枚举的所有值。 使用 EnumToArray trait 可以进一步简化枚举操作,方便将枚举转换为数组,以便更灵活地使用枚举数据。 在实际开发中,可以根据具体需求选择合适的方法来获取枚举的值。
以上就是获取 PHP 枚举的所有值的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1272491.html
微信扫一扫
支付宝扫一扫