首页手机php8.0配置 php8.1配置教程

php8.0配置 php8.1配置教程

圆圆2025-09-05 18:01:24次浏览条评论

PHP 8.1+ 枚举:高效获取所有成员名称与值的实践指南本教程研究探讨PHP 8.1及更高版本中枚举类型(Enum)的成员获取方法。我们将详细介绍如何利用cases()方法结合array_column函数,取出枚举成员的所有高效名称和值,并提供一个可复用的EnumToArray Trait,以封装这些常用操作,从而提升代码的简洁性和可维护性。PHP 8.1枚举基础与cases()方法

php 8.1引入了对枚举(enums)的初步支持,为定义了一组有限的、命名常量集合提供了更构造和类型安全的方式。每个枚举成员都是一个unitenum实例。枚举类型提供了一个核心方法cases(),它返回一个包含所有枚举成员实例的引用。

例如,定义了一个简单的基本枚举:enum Status{ case Active; case Inactive; case Pending;}登录后复制

调用 Status::cases() 将返回 [Status::Active, Status::Inactive, Status::Pending]。获取枚举成员名称

无论是基本枚举(Unit Enum)还是支持枚举(Backed Enum),都可以通过访问其name属性来获取成员的名称。结合cases()方法和array_column函数,轻松可以获取所有成员的名称数组。enum Suit{ case Hearts; case Diamonds; case Clubs; case Spades;}//获取所有枚举的名称$suitNames = array_column(Suit::cases(), 'name');print_r($suitNames);/* 输出:Array( [0] =gt; 红心 [1] =gt; 方块 [2] =gt; 梅花 [3] =gt; 黑桃)*/登录后复制获取支持枚举成员值 (Backed Enum Values)

支持枚举(Backed) Enum)允许为每个成员关联一个标量值(字符串或整数)。对于此类枚举,除名称外,我们还可以通过其value属性获取关联的值。

立即学习“PHP免费学习笔记(深入)”;enum Color: string{ case Red = 'R'; case Green = 'G'; case Blue = 'B';}//获取所有支持枚举成员的关联值$colorValues = array_column(Color::cases(), 'value');print_r($colorValues);/* 输出:Array( [0] =gt; R [1] =gt; G [2] =gt; B)*/登录后复制构建可复用的 EnumToArray Trait

为了避免在每个枚举中重复编写获取名称和值的逻辑,我们可以创建一个 Trait 来封装这些常用操作。该 Trait 将提供 names()、values() 和 array() 等静态方法,方便地获取枚举的各种表示形式。

以下是EnumToArray Trait的定义: PLUG AI

AI辅助包装设计!文档包装方案生成分析评估13查看详情 Trait EnumToArray{ /** * 获取所有枚举成员的名称数组。 * 例如:['Hearts', 'Diamonds'] * * @return arraylt;stringgt; */ public static function names(): array { return array_column(self::cases(), 'name'); } /** * 获取所有支持枚举成员的关联值队列。 * 仅适用于 Backed Enum。 * 如:['H', 'D'] * * @return arraylt;string|intgt; */ public static function values(): array { // 检查当前枚举是否为 Backed Enum if (!is_subclass_of(self::class, \BackedEnum::class)) { throw new \BadMethodCallException(sprintf('方法 s::values() 只能在 Backed Enums 上调用。', self::class)); } return array_column(self::cases(), 'value'); } /** * 获取一个将关联值映射到名称的队列。 * 仅适用于 Backed Enum。

* 如:['H' =gt; 'Hearts', 'D' =gt; 'Diamonds'] * * @return arraylt;string|int, stringgt; */ public static function array(): array { // 检查当前枚举是否为 Backed Enum if (!is_subclass_of(self::class, \BackedEnum::class)) { throw new \BadMethodCallException(sprintf('方法 s::array() can only be call on Backed Enums.', self::class)); } return array_combine(self::values(), self::names()); }}登录后复制

注意事项:values()和array()方法中增加了运行时检查,确保它们只在支持枚举(Backed) Enum)上调用,否则会抛出BadMethodCallException,提高了代码的健壮性。array()方法将value作为键,name作为值,生成一个映射队列。在枚举中使用EnumToArray Trait

要使用这个Trait,只需在你的枚举定义中引入它即可。enum Suit: string{ use EnumToArray; // 引入 Trait case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S';}// 使用 Trait 提供的方法$suitNames = Suit::names();$suitValues = Suit::values();$suitMap = Suit::array();echo quot;所有名称: \nquot;;print_r($suitNames);/* 输出:所有名称:Array( [0] =gt; Hearts [1] =gt; Diamonds [2] =gt; 俱乐部[3] =gt; Spades)*/echo quot;\n所有值: \nquot;;print_r($suitValues);/* 输出:所有值:Array( [0] =gt; H [1] =gt; D [2] =gt; C [3] =gt; S)*/echo quot;\n值到名称的地图: \nquot;;print_r($suitMap);/* 输出:值到名称的地图:Array( [H] =gt;红心 [D] =gt; 方块 [C] =gt; 梅花 [S] =gt; 黑桃)*/登录后复制

通过EnumToArray Trait,我们为枚举提供了一套标准化的接口,用于获取其成员的各种表示形式,极大地简化了代码并提高了可维护性。

总结与注意事项cases()方法核心:它是获取所有枚举高效成员实例的入口,是所有进一步操作的基础。array_column的灵活性:array_column函数是处理cases()返回数组的关键,通过指定'name'或'value'作为第二个参数,可以直接获取所需的数据。Trait的优点:使用Trait能够将通用的逻辑封装起来,避免代码重复,实现枚举定义更简洁,同时易于扩展和维护。区分基本枚举与支持枚举:只有支持枚举(Backed Enum)才具有value属性。在使用values()或array()方法时,一定要确保你的枚举是支持枚举类型,或者像示例Trait中那样加入类型检查以增强健壮性。PHP版本要求:本中介绍的枚举功能及cases()方法仅适用于PHP 8.1及更高版本。

掌握这些方法,让你在 PHP 8.1 项目中能够更、更优雅地处理枚举数据。

以上就是 PHP 8.1 枚举:高效获取所有成员名称与值的实践指南的详细内容,更多请关注乐哥常识网其他相关! 相关标签: php ai red php Array 常量封装枚举类型 enum 字符串文章接口

PHP 8.1+ 枚
如何查询本人名下非机动车 如何查询本机ip地址
相关内容
发表评论

游客 回复需填写必要信息