编程

PHP 的枚举助手(Enum Helpers)

1622 2022-02-28 20:45:41

PHP 8.1 的发布为 PHP 带来了原生的枚举能力。 archtechx/enums扩展包基于原生特性,旨在让枚举的使用更为讨喜。

使用这些库特性, 你可以在你 PHP 项目中为你的枚举增加以下便利:

Invokable case - 通过调用它来获取支持的枚举的值
Names - 返回枚举中的案例名称列表
Values - 返回枚举中的 case 值列表
Options - 返回案例名称和值的关联数组
鉴于上述功能,以下是包的 README 中的一些示例。

首先,InvokableCases 特性的工作原理如下:

// Invokable
use ArchTech\Enums\InvokableCases;
enum TaskStatus: int
{
   use InvokableCases;
   case INCOMPLETE = 0;
   case COMPLETED = 1;
   case CANCELED = 2;
}
TaskStatus::INCOMPLETE(); // 0
TaskStatus::COMPLETED(); // 1
TaskStatus::CANCELED(); // 2

接下来,这里是如何从枚举中获取案例名称:

use ArchTech\Enums\Names;

enum TaskStatus: int
{
    use Names;

    case INCOMPLETE = 0;
    case COMPLETED = 1;
    case CANCELED = 2;
}

TaskStatus::names();
// ['INCOMPLETE', 'COMPLETED', 'CANCELED']

Values 特性可以返回一个可能的枚举值数组:

use ArchTech\Enums\Values;

enum TaskStatus: int
{
    use Values;

    case INCOMPLETE = 0;
    case COMPLETED = 1;
    case CANCELED = 2;
}

TaskStatus::values(); // [0, 1, 2]

最后,Options 特性返回名称和值的关联数组:

use ArchTech\Enums\Options;

enum TaskStatus: int
{
    use Options;

    case INCOMPLETE = 0;
    case COMPLETED = 1;
    case CANCELED = 2;
}

TaskStatus::options();
// ['INCOMPLETE' => 0, 'COMPLETED' => 1, 'CANCELED' => 2]