laudis / 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 集成
您可以通过在类文档块的 @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 开发