简单且基础的功能,用于开始在项目中使用 Enum。

v2.0.0 2020-03-12 18:23 UTC

This package is auto-updated.

Last update: 2024-09-13 04:19:15 UTC


README

Build Status

使用 ENUM

简单且基础的功能,用于开始在项目中使用 Enum。只需通过创建 Enum 类来初始化 Enum 值。

final class SizeEnum extends \githubjeka\enum\BaseObjectEnum
{
    const XS = 'xs';
    const SMALL = 's';
    const MEDIUM = 'm';
    const LARGE = 'l';
    const XL = 'xl';
    const XXL = 'xxl';

    public static function getList(): array
    {
        return [
            self::XS => 'Extra small(xs)',
            self::SMALL => 'Small',
            self::MEDIUM => 'Medium',
            self::LARGE => 'Large',
            self::XL => 'Extra large(xl)',
            self::XXL => 'Extra extra large(xxl)',
        ];
    }
}

之后,您可以使用 API 枚举,例如

SizeEnum::getList()

返回用于在 HTML 列表元素(如复选框、选择框等)中使用的准备好的列表

SizeEnum::getKeys()

返回 ENUM 的值,用于在验证规则中使用,如 Assertion::inArray('xs', SizeEnum::getKeys());;

SizeEnum::XXL

返回字符串键。用于与保存的值进行比较 (bool)('xxl' === SizeEnum::XXL)?>;

SizeEnum::getLabel(SizeEnum::LARGE)

返回值的文本描述。如果值错误,将返回 InvalidArgumentException

SizeEnum::isValid('xl')

用于避免 InvalidArgumentException 异常。

new SizeEnum('xxl')

返回枚举对象。

class Shirt
{
    private $size;

    public function __construct(SizeEnum $size)
    {
        $this->size = $size;
    }

    public function size(): SizeEnum
    {
        return $this->size;
    }
}

$sizeFromDb = 'xxl';
$size = new SizeEnum($sizeFromDb);
$shirt = new Shirt($size);

$shirt->size()->asKey(); // (string) xxl 

$shirt->size()->asLabel(); // (string) Extra extra large(xxl)

$shirt->size()->equals(new SizeEnum(SizeEnum::XS)); // (bool) false

echo $shirt->size(); // (string) xxl

额外

强烈建议您不要使用数字作为枚举值

const XS = '0';         // not recommend
const SMALL = '1';      // not recommend
const MEDIUM = 2;       // not recommend
const LARGE = 3;        // not recommend

因为如果您错误地引用 ENUM 值,很容易混淆字符串和基础数字值。

默认情况下,期望所有 Enum(常量)都是字符串。

如果您想使用整数,可以在您的 Enum 类中将 $stringMode 属性更改为 FALSE。之后,应仅对常量使用整数值

const XS = 0;
const SMALL = 1;
const MEDIUM = 2;
const LARGE = 3;

如果您使用 MySQL ENUM,请参阅限制 also