grifart / enum
提供具有行为的防弹枚举。
0.2.1
2019-12-10 15:36 UTC
Requires
- php: >=7.1.0
Requires (Dev)
- grifart/phpstan-oneline: ^0.2.0
- nette/tester: ^2.1.0
- phpstan/phpstan: ^0.10.7
- phpstan/phpstan-strict-rules: ^0.10.1
This package is auto-updated.
Last update: 2024-09-13 13:25:43 UTC
README
枚举值对象。使用类型安全枚举值和行为。
仓库 gitlab.grifart.cz 和 github.com.
由 grifart.com 赞助。
你喜欢视频 📺 而不是阅读吗?这里有英文的一个 和捷克语的一个。
介绍
枚举代表预定义的值集。每个枚举类静态地定义了可用的值。每个值都通过该类的实例以轻量级方式表示。
- 此枚举允许您为每个枚举值添加个别行为(类似于Java)。这允许您将您的
switch
/if
转换为更易于阅读的组合。(见以下示例) - 检查枚举注解,如果phpdoc声明的类方法是否正确声明(当未指定或错误时将为您生成文档块)
- 支持
===
、==
和switch
的使用 - 支持字符串或整数标量键
- 轻松访问枚举的标量值
DayOfWeek::MONDAY()->toScalar()
或(string) DayOfWeek::MONDAY()
还包括
- 它是类型安全的。通过注释您的枚举类型,您可以保证不会有您未声明的其他值。
function translateTo(DayOfWeek $day) { ...
- 您可以获取所有可能的值的列表
Enum::getAvailableValues()
安装
composer require grifart/enum
此库使用语义版本控制 2.0。您可以在您的 composer.json
中安全地使用 ^
约束。
要求
此库需要 PHP 7.1 及更高版本。
项目状态 & 发布流程
虽然此库仍在开发中,但它经过充分测试,应该足够稳定,可以用于生产环境。
当前版本号是 0.x.y。当引入非破坏性更改(添加新方法、优化现有代码等)时,y 增加。
当引入破坏性更改时,始终开始一个新的 0.x 版本周期。
因此,锁定项目到给定的发布周期,例如 0.1.*,是安全的。
如果您需要升级到较新的发布周期,请查看发布历史记录,以获取每个进一步的 0.x.0 版本引入的更改列表。
概述
静态方法
- fromScalar() - 返回给定标量的枚举实例(值)
- getAvailableValues() - 返回给定类型的所有值
- provideInstances() - 实现,以返回枚举实例,或自动通过
Grifart\Enum\AutoInstances
特性实现。
实例方法
- toScalar() - 返回标量值标识符
- equals() - 如果传递了相同的枚举值,则返回 true
- scalarEquals() - 如果传递的标量值等于当前值,则返回 true
最简单的枚举
/** * @method static DayOfWeek MONDAY() * @method static DayOfWeek TUESDAY() */ final class DayOfWeek extends \Grifart\Enum\Enum { use Grifart\Enum\AutoInstances; private const MONDAY = 'monday'; private const TUESDAY = 'tuesday'; } $monday = DayOfWeek::MONDAY(); function process(DayOfWeek $day): void { /* ... */ }
具有行为的值
这样可以用组合代替条件。
本示例最初来源于忠诚度计划领域,继续查看完整代码示例及上下文。
/** * @method static ExpirationType ASSIGNMENT() * @method static ExpirationType FIXED() */ abstract class ExpirationType extends \Grifart\Enum\Enum { protected const ASSIGNMENT = 'assignment'; protected const FIXED = 'fixed'; abstract public function computeExpiration(Offer $offer): \DateTimeImmutable; protected static function provideInstances() : array { return [ new class(self::ASSIGNMENT) extends ExpirationType { public function computeExpiration(Offer $offer): \DateTimeImmutable { return /* behaviour A */; } }, new class(self::FIXED) extends ExpirationType { public function computeExpiration(Offer $offer): \DateTimeImmutable { return /* behaviour B */; } }, ]; } }
从类常量迁移[源代码]
本指南展示了如何通过几个简单步骤从具有常量的类迁移到\Grifart\Enum
。继续查看示例
为值添加行为[源代码]
本指南展示了如何逐步为枚举值添加行为。继续查看示例
复杂展示:订单生命周期跟踪[源代码]
本示例包含5种实现订单状态的方法。继续查看示例。
衷心感谢
- David Grudl 为制作 Nette Tester
- Ondřej Mirtes 为制作 PHP Stan。