b2b/enum

PHP 枚举实现

1.0.2 2018-03-11 21:24 UTC

This package is not auto-updated.

Last update: 2024-09-13 01:53:13 UTC


README

为什么?

首先,主要的是 SplEnum 并未集成到 PHP 中,您需要单独安装。

使用枚举而不是类常量提供以下优势

  • 您可以进行类型提示: function setAction(Action $action) {
  • 您可以丰富枚举以包含方法(例如 formatparse、…)
  • 您可以扩展枚举以添加新值(使您的枚举 final 以防止扩展)
  • 您可以得到所有可能值的列表(见下文)

此 Enum 类并不旨在取代类常量,而只是在有意义的场合使用。

安装

composer require b2b/enum

声明

use B2B\Enum\Enum;

/**
 * Action enum
 */
class Action extends Enum
{
    const VIEW = 'view';
    const EDIT = 'edit';
}

使用

$action = new Action(Action::VIEW);

// or
$action = Action::VIEW();

如您所见,静态方法已自动实现,以提供对枚举值的快速访问。

使用类常量的一个优势是可以对枚举值进行类型提示

function setAction(Action $action) {
    // ...
}

文档

  • __construct() 构造函数检查值是否存在于枚举中
  • __toString() 您可以 echo $myValue,它将显示枚举值(常量的值)
  • getValue() 返回枚举的当前值
  • getKey() 返回当前值在 Enum 上的键
  • equals() 测试枚举实例是否相等(如果枚举值相等则返回 true,否则返回 false

静态方法

  • toArray() 方法返回所有可能值作为数组(键为常量名,值为常量值)
  • keys() 返回 Enum 类中所有常量的名称(键)
  • values() 返回所有 Enum 常量的 Enum 类实例(键为常量名,值为 Enum 实例)
  • isValid() 检查测试值是否在枚举集中有效
  • isValidKey() 检查测试键是否在枚举集中有效
  • search() 返回搜索值的键

静态方法

class Action extends Enum
{
    const VIEW = 'view';
    const EDIT = 'edit';
}

// Static method:
$action = Action::VIEW();
$action = Action::EDIT();

使用 __callStatic() 实现了静态方法辅助程序。

如果您关心 IDE 自动完成,您可以自己实现静态方法

class Action extends Enum
{
    const VIEW = 'view';

    /**
     * @return Action
     */
    public static function VIEW() {
        return new Action(self::VIEW);
    }
}

或者,您可以使用 phpdoc(例如,PhpStorm 支持)

/**
 * @method static Action VIEW()
 * @method static Action EDIT()
 */
class Action extends Enum
{
    const VIEW = 'view';
    const EDIT = 'edit';
}