备件 / 枚举
简单的枚举类。
v1.1.2
2021-05-07 07:54 UTC
Requires
- php: >=7.1
Requires (Dev)
- mockery/mockery: ^0.9.6
- phpunit/phpunit: ~5
This package is auto-updated.
Last update: 2024-09-07 15:12:50 UTC
README
PHP 枚举的正确做法
在 PHP 中使用枚举值的一种简单方法。
安装
请使用 composer。
composer require spareparts/enum
基本用法
/** * @method static OPEN * @method static CLOSED */ class WindowStateEnum extends \SpareParts\Enum\Enum { } // obtain enum value $state = WindowStateEnum::OPEN(); // assign enum value $windows->state = WindowStateEnum::CLOSED(); // compare enum values if ($window->state === WindowStateEnum::OPEN()) { .... } // use enum to guard method parameters function changeWindowState(WindowStateEnum $newState) { ... }
如何准备枚举
- 扩展枚举类
- 使用 @method 注解标注枚举类,描述枚举值
如何使用枚举
使用枚举值有两种可能的方法,第一种是首选的方法。
- 使用与所需值相同名称的静态方法。
这得益于魔法 __callStatic 方法,意味着您无需手动添加任何方法。
$state = WindowStateEnum::OPEN();
这种方法是首选的,因为它可以很好地显示其预期值,而无需使用弱保护的字符串。
重要提示:要正确自动完成值,请使用 @method 注解,如下所示
/** * @method static OPEN * @method static CLOSED */ class WindowStateEnum extends \SpareParts\Enum\Enum { }
这样,您的 IDE 应该知道 WindowStateEnum
有 2 个方法 OPEN 和 CLOSE,并正确提示它们的名称。如果您使用不支持 @method 注解的 IDE,您始终可以“真正”添加这些方法 :)
- 使用
instance()
方法,并将所需值作为实例参数
$state = WindowStateEnum::instance('OPEN');
这种方法没有错误,但容易犯错误/打字错误。
请求不支持的枚举值
如果您请求的值不在枚举值中,将抛出 InvalidEnumValueException 异常。
try { $window->setState(WindowStateEnum::FLYING()); } catch (InvalidEnumValueException $e) { echo "This is not a correct state for window to be in!"; }
检查多个值
您可以像这样检查枚举是否属于任何枚举组/集合
if ($state->isAnyOf([Window::OPEN(), Window::CLOSED()]));