vaened/php-enum

PHP 枚举支持

V2.1.0 2022-09-29 20:46 UTC

This package is auto-updated.

Last update: 2024-08-29 05:19:06 UTC


README

Build Status Scrutinizer Code Quality Software License

友好的枚举实现。

$status = Status::WARNING();

$status->key(); // WARNING
$status->value(); // Advertencia

// custom attribute
$status->getColor(); // yellow

安装

PHP Enum 需要 PHP 8。

要获取最新版本,只需使用 Composer 请求项目

$ composer require vaened/php-enum

声明

要创建枚举,需要从 Vaened\Enum\Enum 继承,同时为枚举的每个值创建常量。这个库可以为每个枚举添加属性,与 Java 中的枚举非常相似。

<?php namespace App\Enums;

use App\Color;
use Vaened\Enum\Attributor;
use Vaened\Enum\Enum;

class Status extends Enum
{
    // Enums
    public const WARNING = 'Advertencia';

    public const SUCCESS = 'Exito';
}

使用

一旦实现枚举,您可以使用其值如下。该库使用 __callStatic 来创建指定枚举的实例,根据请求的值。

use App\Enums\Status;

// returns an instance of Status, with the value of the constant WARNING
Status::WARNING();

如果需要自动完成 ID,您可以手动定义方法。

class Status extends Enum
{
    public const WARNING = 'Advertencia';

    public static function WARNING(): self 
    {
        return self::create(self::WARNING);
    }
}

或者,如果您使用支持 phpdocs 的某些 ID,您可以这样做

/**
 * Class Status
 *
 * @method static Status WARNING()
 */
class Status extends Enum
{
    public const WARNING = 'Advertencia';
}

高级

可能存在需要向枚举添加某些附加属性的具体情况。为此,您需要重写所有 Enum 子类中可用的受保护静态方法 attributes,在这里您必须定义每个枚举将使用的属性。

必须使用 Vaened\Enum\Attributor 类。

Attributor::to('CONSTANT', [
    'name' => 'value'
]);

要获取任何属性,您可以使用接受属性名称作为参数的受保护方法 attribute

class Status extends Enum
{
    public const SUCCESS = 'Éxito';

    public function getColor(): Color
    {
        return $this->attribute('color');
    }

    protected static function attributes(): array
    {
        return [
            Attributor::to('SUCCESS', [
                'color' => new Color('blue'),
            ]),
        ];
    }
}

API

更多文档

您可以在源代码中找到很多注释,以及位于 tests 目录中的测试。