c枚举类型的高级使用 csharp 枚举
论文详细介绍了在PHP 8.1及更高版本中如何结合地获取枚举(Enum)的所有成员名称和关联值。通过Enum::cases()方法,以及引入一个可复用的EnumToArray特性,本教程将帮助开发者以构造和优雅的方式管理和访问枚举数据,提升代码的邻近性和维护性。PHP枚举基础与值获取
php 8.1 引入了对枚举(enums)的枚举支持,为定义了一组有限的、命名常量提供了强大的机制安全类型。在实际开发中,我们需要经常获取枚举的所有成员,无论是其名称(如hearts)还是其关联的原始值(如h)。获取所有枚举成员
所有类型枚举都提供了一个静态方法cases(),它返回一个枚举实例的数组。这是获取枚举所有成员的基础。enum Suit{ case红桃;方块;梅花;黑桃;}// 获取所有Suit枚举成员$allSuits = Suit::cases();/*$allSuits会是一个包含以下对象的缓存:[ Suit::Hearts, Suit::Diamonds, Suit::Clubs, Suit::Spades]*/登录后复制取出基本枚举的名称
对于没有关联值的基本枚举(Pure Enums),我们可以通过访问每个枚举实例的名称属性来获取其名称。结合 array_column 函数,可以简洁地提取所有名称。enum Suit{ case Hearts; case Diamonds; case Clubs; case Spades;}$suitNames = array_column(Suit::cases(), 'name');/*$suitNames 会是:[ 'Hearts', 'Diamonds', 'Clubs', 'Spades']*/登录后复制提取Backed枚举的关联值
如果枚举是“Backed” Enum”(支持枚举),即每个枚举成员都关联了一个标记量值(字符串或整数),我们可以通过访问枚举每个实例的值属性来获取这些关联值。同样,array_column是一个非常方便的工具。enum Suit: string{ case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S';}$suitValues = array_column(Suit::cases(), 'value');/*$suitValues 会是:[ 'H', 'D', 'C', 'S']*/登录后复制使用特性(Trait)封装枚举值获取逻辑
为了避免在多个枚举中重复编写获取名称和值的逻辑,我们可以创建一个PHP特性(Trait)来封装这些常用操作。这样不但能代码的复用性,还能使枚举更加定义自定义提高。
立即学习“PHP免费学习笔记(深入)”;PLUG AI
AI辅助包装设计!物品包装方案生成分析评估13查看详情 EnumToArray 特性定义
以下是一个名为 EnumToArray 的特性,它提供了三个静态方法:names()、values() 和array()。names():返回所有枚举成员的名称。values():返回所有支持的枚举成员的关联值。array():返回一个关联数组,其中键是枚举的关联值,值为枚举的名称。trait EnumToArray{ /** * 获取所有枚举成员的名称。 * @return array */ public static function names(): array { // self::cases() 在使用此trait的枚举中有效返回array_column(self::cases(), 'name'); } /** * 获取所有Backed枚举成员的关联值。 * 仅适用于Backed Enum。 * @return array */ public static function values(): array { // self::cases() 在使用此trait的枚举上下文中有效 return array_column(self::cases(), 'value'); } /** * * 仅适用于Backed Enum。 * @return array */ public static function array(): array { // 结合values()和names()方法 return array_combine(self::values(), self::names()); }}登录后复制在枚举中使用 EnumToArray 功能
使用该功能,只需在你定义的枚举中通过 use EnumToArray 即可;引入即可。
enum Suit: string{ use EnumToArray; // 引入特性 case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S';}// 使用特性提供的方法$suitNames = Suit::names();/*$suitNames 会是:[ 'Hearts', 'Diamonds', 'Clubs', '黑桃']*/$suitValues = 花色::values();/*$suitValues 会是:[ 'H', 'D', 'C', 'S']*/$suitMap = 花色::array();/*$suitMap 会是:Array( [H] =gt; 红心 [D] =gt; 方块 [C] =gt; 梅花 [S] =gt; Spades)*/登录后复制注意事项Trait的适用性: EnumToArray 特性中的values() 和 array() 方法是为 Backed Enum 设计的。如果将其用于 Pure Enum(无关联值的枚举),array_column(self::cases(), 'value') 会导致错误,因为 Pure Enum 的实例没有 value 属性考虑。在实际应用中,可以为 Pure Enum 和 Backed Enum 分别创建不同的特性,或者在特性内部进行类型检查。性能考量: Enum::cases()每次调用时都会返回一个新的数组,但其内部实现通常会存储枚举实例,重复调用不会造成明显的性能问题。array_column也是一个高效的数组操作函数。PHP版本要求:枚举功能仅在 PHP 8.1 及更高版本中可用。总结
PHP 8.1引入的枚举功能极大地提升了代码的类型安全性和优越性。通过 Enum:结合:cases() 方法,我们可以轻松获取所有成员枚举。 array_column,可以方便地提取成员名称或关联值。更进一步,利用特性(Trait)封装这些常用操作,例如 EnumToArray 如图所示,可以有效地提高代码的复用性和维护性,使高效枚举值的管理更加优雅和。在设计和使用枚举时,选择合适的策略来访问和操作其数据,将有助于构建更加健壮、更易于维护的PHP应用程序。
以上就是PHP枚举值获取:全面指南与实用技巧的详细内容,更多请乐哥常识网其他相关! 相关标签: php工具ai php数组常量关联设备封装类型枚举枚举字符串
