php枚举库php-enum的使用
github:php-enum (opens new window)
# 安装
composer require myclabs/php-enum
1
# 声明
use MyCLabs\Enum\Enum;
/**
* Action enum
*/
final class Action extends Enum
{
private const VIEW = 'view';
private const EDIT = 'edit';
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 用法
$action = Action::VIEW();
// or with a dynamic key:
$action = Action::$key();
// or with a dynamic value:
$action = Action::from($value);
// or
$action = new Action($value);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
如您所见,静态方法会自动实现,以提供对枚举值的快速访问。
与使用类常量相比,一个优点是能够使用枚举作为参数类型:
function setAction(Action $action) {
// ...
}
1
2
3
2
3
# 文档
__construct()
:构造函数检查枚举中是否存在该值__toString()
:你可以,它将显示枚举值(常量的值)echo $myValuegetValue()
:返回枚举的当前值getKey()
:返回枚举上当前值的键equals()
:测试枚举实例是否相等(如果枚举值相等,则返回,否则返回)truefalse
# 静态方法
from()
:创建枚举实例,检查该值是否存在于枚举中toArray()
:方法 以数组形式返回所有可能的值(键中的常量名称,值中的常量值)keys()
:返回 Enum 类中所有常量的名称(键)values()
:返回所有枚举常量的枚举类的实例(键中的常量名称,值中的枚举实例)isValid()
:检查测试值在枚举集上是否有效isValidKey()
:检查测试密钥在枚举集上是否有效assertValidValue()
:断言该值在枚举集上有效,否则会引发异常search()
:搜索值的返回键
final class Action extends Enum
{
private const VIEW = 'view';
private const EDIT = 'edit';
}
// Static method:
$action = Action::VIEW();
$action = Action::EDIT();
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
静态方法帮助程序是使用 __callStatic()
实现的。
如果您关心 IDE 自动完成,则可以自己实现静态方法:
final class Action extends Enum
{
private const VIEW = 'view';
/**
* @return Action
*/
public static function VIEW() {
return new Action(self::VIEW);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
或者你可以使用 phpdoc(例如,PhpStorm 支持这一点):
/**
* @method static Action VIEW()
* @method static Action EDIT()
*/
final class Action extends Enum
{
private const VIEW = 'view';
private const EDIT = 'edit';
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 本机枚举和迁移
本机枚举在 8.1 版中到达 PHP:https://www.php.net/enumerations 如果您的项目运行 PHP 8.1+ 或您的库将其作为最低要求,则应使用它而不是此库。
从 中迁移时,如果采用推荐的方式使用,则工作量应该很小:myclabs/php-enum
- private constants
- final classes
- no method overridden
迁移更改:
- 类定义应从
/**
* @method static Action VIEW()
* @method static Action EDIT()
*/
final class Action extends Enum
{
private const VIEW = 'view';
private const EDIT = 'edit';
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
自
enum Action: string
{
case VIEW = 'view';
case EDIT = 'edit';
}
1
2
3
4
5
2
3
4
5
将类用作类型的所有位置将继续工作。
用法和所需的更改:
操作 | myclabs/php-enum | 本机枚举 |
---|---|---|
获取实例将从 | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
从支持的值创建枚举 | $enumCase = new Action('view') | $enumCase = Action::from('view') |
获取枚举实例的备份值 | $enumCase->getValue() | $enumCase->value |
比较两个枚举实例 | $enumCase1 == $enumCase2 或 $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
获取枚举实例的密钥/名称 | $enumCase->getKey() | $enumCase->name |
获取枚举的所有可能实例的列表 | Action::values() | Action::cases() |
获取按名称映射的枚举的可能实例的映射 | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) 或 (new ReflectionEnum(Action::class))->getConstants() |
获取枚举的所有可能名称的列表 | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
获取枚举的所有可能支持值的列表 | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
获取按名称映射的枚举的可能支持值的映射 | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) 或 array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
上次更新: 2023/09/22, 16:54:32