备件/枚举

简单的枚举类。

v1.1.2 2021-05-07 07:54 UTC

README

PHP 枚举的正确做法

Build Status Scrutinizer Code Quality Code Coverage

在 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) {
    ...
}

如何准备枚举

  1. 扩展枚举类
  2. 使用 @method 注解标注枚举类,描述枚举值

如何使用枚举

使用枚举值有两种可能的方法,第一种是首选的方法。

  1. 使用与所需值相同名称的静态方法。

这得益于魔法 __callStatic 方法,意味着您无需手动添加任何方法。

$state = WindowStateEnum::OPEN();

这种方法是首选的,因为它可以很好地显示其预期值,而无需使用弱保护的字符串。

重要提示:要正确自动完成值,请使用 @method 注解,如下所示

/**
 * @method static OPEN
 * @method static CLOSED
 */
class WindowStateEnum extends \SpareParts\Enum\Enum 
{
}

这样,您的 IDE 应该知道 WindowStateEnum 有 2 个方法 OPEN 和 CLOSE,并正确提示它们的名称。如果您使用不支持 @method 注解的 IDE,您始终可以“真正”添加这些方法 :)

  1. 使用 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()]));