codinc / phpenum
简单的PHP枚举实现,作为SplEnum的替代品
1.0.3
2018-05-17 06:48 UTC
Requires
- php: >=7.1.0
Requires (Dev)
- phpunit/phpunit: ~7.1
This package is not auto-updated.
Last update: 2024-09-29 05:21:09 UTC
README
这是一个简单的PHP枚举实现,作为SplEnum的替代品,允许对属于枚举的值进行类型安全。
安装
composer require codinc/phpenum
使用方法
抽象类支持通过具体类进行扩展,具体类定义常量作为有效的值。
use Codinc\Type\Enum;
class MyEnum extends Enum
{
const PERSONAL = 'personal';
const TEAM = 'team';
}
当然,枚举的最大优点是允许对值集的方法进行类型提示和内置安全。
public function doAnAction(MyEnum $value)
{
// Can only contain PERSONAL or TEAM
}
本实现的最大优点和区别在于它允许原生的严格比较。枚举跟踪实例化的对象,以确保只能使用一个实例。
MyEnum::PERSONAL() === MyEnum::PERSONAL(); // === true
支持将常量作为方法调用,而不增加额外的开销。如果您希望获得自动补全的好处或希望保护您的常量,您仍然可以自己定义公共静态方法并在枚举上调用load。
use Codinc\Type\Enum;
class MyEnum extends Enum
{
const PERSONAL = 'personal';
const TEAM = 'team';
const WORLD = 'world';
private const COMPANY = 'company';
public static function WORLD()
{
return self::load(self::WORLD);
}
public static function COMPANY()
{
return self::load(self::COMPANY);
}
}
$personal = MyEnum::PERSONAL();
$world = MyEnum::WORLD();
不支持值将抛出 \InvalidArgumentException 异常。
MyEnum::load('personal'); // === MyEnum::PERSONAL()
MyEnum::load('made_up'); // throws \InvalidArgumentException
MyEnum::load($repository->fetchColumn($column));