prinsfrank/enums

添加缺失的严格类型方法以处理枚举

资助包维护!
PrinsFrank

v1.2 2024-02-01 14:15 UTC

This package is auto-updated.

Last update: 2024-09-18 19:16:49 UTC


README

枚举

GitHub PHP Version Support codecov PHPStan Level

添加缺失的严格类型方法以处理枚举

设置

注意 确保您正在运行 PHP 8.1 或更高版本以使用此包

要立即开始,请在您的 composer 项目中运行以下命令;

composer require prinsfrank/enums

或者仅用于开发;

composer require prinsfrank/enums --dev

此包的工作原理

UnitEnum

假设我们有一个以下的 UnitEnum

enum Example {
    case Foo;

    #[HasSpecialMeaning]
    case Bar;
}

如果我们想从字符串中通过名称获取值,我们可以调用 fromNametryFromName;

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';
}

如果我们想从字符串中通过名称获取值,我们可以调用 fromNametryFromName;

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()]