codinc / phpenum

简单的PHP枚举实现,作为SplEnum的替代品

1.0.3 2018-05-17 06:48 UTC

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));