youngsource / typed-enum
允许进行类型枚举的小类。
1.3.2
2022-01-04 23:33 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.3
- phpunit/phpunit: 9.*
- psalm/plugin-phpunit: ^0.16
- vimeo/psalm: ^4.12
README
Typed-enum 是一个简单、轻量级且高效的枚举库。高效且严格地类型提示枚举选项,以消除由拼写错误引入的不期望的副作用和错误。
如何使用
下载
使用 composer 下载
从 TypedEnum 扩展
从 TypedEnum 扩展并使用任何标量常量来定义枚举
final class Foo extends TypedEnum { private const BAR = 'bar'; private const BAZ = 2; private const FOO = 2.1; }
您现在可以使用基于常量名称的 __callstatic 方法创建 Foo 的实例
Foo::BAR(); // Returns an instance of Foo with value 'bar'
测试相等性
作为额外的好处,您现在可以使用严格的比较。TypedEnum 保证在运行时只有一个相同枚举值的实例。
function isBar(Foo $enum): bool { return Foo::BAR() === $enum; }
返回实际值
如果您的应用程序依赖于分配给枚举的值,您可以使用 getValue() 获取器轻松获取它。
echo Foo::BAR()->getValue(); //'bar'
解析枚举
根据其值解析枚举。resolve 方法将返回具有相同值的枚举数组。
echo Foo::resolve('bar')[0] === Foo::BAR() // true
技巧
IDE 集成
您可以通过在类的 docblock 中添加 @method 标签来轻松使用 IDE 的功能,如下所示
/** * @method static TypedEnum TEST() */ final class Foo extends TypedEnum { private const TEST = 'test'; }
Psalm
我们用 psalm 构建了 TypedEnum!有了这些强大的注解,您现在可以提示枚举的标量值
/** * @extends TypedEnum<string> */ final class Foo extends TypedEnum { private const TEST = 'test'; }
易于错误保护
PHP 7.2 允许使用受保护的常量,而 7.4 使用私有常量。使用这些功能来防止不期望的副作用!
echo Foo::BAR === Foo::BAR() // echo's false but is impossible if it is a protected constant
由 laudis 开发