dkulyk/enum

PHP Enum Laravel 集成

维护者

详细信息

github.com/dkulyk/enum

源代码

1.2.5 2021-01-13 09:01 UTC

This package is auto-updated.

Last update: 2024-09-13 16:54:04 UTC


README

为什么?

首先,也是最重要的,PHP 中没有集成 SplEnum,您必须单独安装它。

使用枚举代替类常量有以下优点

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

此 Enum 类不打算替换类常量,而仅在使用它有意义时使用。

安装

composer require dkulyk/enum

声明

use DKulyk\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() 返回枚举当前值的键
  • 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';
}