vjik/php-enum

PHP 枚举实现

4.0.0 2021-05-27 06:46 UTC

This package is auto-updated.

Last update: 2024-08-27 13:31:05 UTC


README

Latest Stable Version Total Downloads Build status Mutation testing badge static analysis

该软件包实现了来自RFC 枚举的思想,并提供了一个抽象类 Enum,旨在创建带有支持 额外数据 和辅助静态函数 values()cases()isValid() 的枚举对象。

要求

  • PHP 8.0 或更高版本。

安装

该软件包可以通过 composer 安装

composer require vjik/php-enum --prefer-dist

通用用法

类声明

use Vjik\Enum\Enum;

/**
 * @method static self NEW()
 * @method static self PROCESS()
 * @method static self DONE()
 */
final class Status extends Enum
{
    private const NEW = 'new';
    private const PROCESS = 'process';
    private const DONE = 'done';
}

创建对象

通过静态方法 from()

$process = Status::from('process');

如果创建对象时值无效,将抛出 ValueError

通过静态方法 tryFrom()

$process = Status::tryFrom('process'); // Status object with value "process"
$process = Status::tryFrom('not-exists'); // null

如果创建对象时值无效,返回 null

通过与常量名称相同的静态方法

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

$process = Status::PROCESS();

获取值和名称

Status::DONE()->getName(); // DONE
Status::DONE()->getValue(); // done

带有额外数据的类

在受保护的静态函数 data() 中设置数据,并使用受保护的函数 getPropertyValue() 创建getter。您还可以使用受保护的函数 match() 创建getter。

use Vjik\Enum\Enum;

/**
 * @method static self CREATE()
 * @method static self UPDATE()
 */
final class Action extends Enum
{
    private const CREATE = 1;
    private const UPDATE = 2;

    protected static function data(): array
    {
        return [
            self::CREATE => [
                'tip' => 'Create document',
            ],
            self::UPDATE => [
                'tip' => 'Update document',
            ],
        ];
    }

    public function getTip(): string
    {
        /** @var string */
        return $this->getPropertyValue('tip');
    }
    
    public function getColor(): string
    {
        return $this->match([
            self::CREATE => 'red',
            self::UPDATE => 'blue',
        ]);
    }
    
    public function getCode(): int
    {
        return $this->match([
            self::CREATE => 1,
        ], 99);
    }
}

使用

echo Action::CREATE()->getTip();
echo Action::CREATE()->getColor();
echo Action::CREATE()->getCode();

辅助静态函数

值列表 values()

返回值列表。

// [1, 2]
Action::values(); 

对象列表 cases()

返回对象列表

// [$createObject, $updateObject]
Action::cases();

验证值 isValid()

检查值是否在枚举集中有效。

Action::isValid(1); // true
Action::isValid(99); // false

转换为字符串

Enum 支持转换为字符串(使用魔术方法 __toString)。值以字符串形式返回。

echo Status::DONE(); // done

测试

单元测试

该软件包使用 PHPUnit 进行测试。要运行测试

./vendor/bin/phpunit

变异测试

该软件包的测试使用 Infection 变异框架进行检查。要运行它

./vendor/bin/infection

静态分析

代码使用 Psalm 进行静态分析。要运行静态分析

./vendor/bin/psalm

许可

PHP 枚举实现是自由软件。它根据 BSD 许可证的条款发布。有关更多信息,请参阅 LICENSE

致谢

该软件包的第三个版本受到 myclabs/php-enum 的启发。