vjik / php-enum
PHP 枚举实现
4.0.0
2021-05-27 06:46 UTC
Requires
- php: ^8.0
Requires (Dev)
- infection/infection: ^0.23.0
- phpunit/phpunit: ^9.4
- vimeo/psalm: ^4.7
README
该软件包实现了来自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
的启发。