prinsfrank / enums
添加缺失的严格类型方法以处理枚举
v1.2
2024-02-01 14:15 UTC
Requires
- php: ^8.1 || ^8.2 || ^8.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.43
- phpstan/phpstan: ^1.10
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^10.5
README
枚举
添加缺失的严格类型方法以处理枚举
设置
注意 确保您正在运行 PHP 8.1 或更高版本以使用此包
要立即开始,请在您的 composer 项目中运行以下命令;
composer require prinsfrank/enums
或者仅用于开发;
composer require prinsfrank/enums --dev
此包的工作原理
UnitEnum
假设我们有一个以下的 UnitEnum
enum Example { case Foo; #[HasSpecialMeaning] case Bar; }
如果我们想从字符串中通过名称获取值,我们可以调用 fromName
或 tryFromName
;
UnitEnum::fromName(Example::class, 'Foo'); // Example::Foo UnitEnum::tryFromName(Example::class, 'Foo'); // Example::Foo
两种方法之间的区别在于它们处理不存在的名称的方式;
UnitEnum::fromName(Example::class, 'Example'); // @throws NameNotFoundException UnitEnum::tryFromName(Example::class, 'Example'); // null
此包还提供了一种获取枚举所有名称的数组的方法;
UnitEnum::names(Example::class); // ['Foo', 'Bar']
最后,提供了一些方便获取枚举案例属性的方法
UnitEnum::hasCaseAttributes(Example::Bar, HasSpecialMeaning); // true UnitEnum::getCaseAttributes(Example::Bar); // [new HasSpecialMeaning()]
BackedEnum
假设我们有以下 BackedEnum:(枚举是否由字符串或整数支持无关紧要)
enum Example: string { case Foo = 'Foo'; #[HasSpecialMeaning] case Bar = 'Bar'; }
如果我们想从字符串中通过名称获取值,我们可以调用 fromName
或 tryFromName
;
BackedEnum::fromName(Example::class, 'Foo'); // Example::Foo BackedEnum::tryFromName(Example::class, 'Foo'); // Example::Foo
两种方法之间的区别在于它们处理不存在的名称的方式;
BackedEnum::fromName(Example::class, 'Example'); // @throws NameNotFoundException BackedEnum::tryFromName(Example::class, 'Example'); // null
此包还提供了一种获取枚举所有名称的数组的方法;
BackedEnum::names(Example::class); // ['Foo', 'Bar']
最后,提供了一些方便获取枚举案例属性的方法
BackedEnum::hasCaseAttributes(Example::Bar, HasSpecialMeaning); // true BackedEnum::getCaseAttributes(Example::Bar); // [new HasSpecialMeaning()]