php 模拟enum,受SplEnum启发的PHP Enum实现

受SplEnum启发的PHP Enum实现

首先,主要SplEnum是由于未集成到PHP中,您必须单独安装扩展。

使用枚举而不是类常量具有以下优点:

您可以将枚举用作参数类型: function setAction(Action $action) {

您可以使用枚举作为返回类型: function getAction() : Action {

你可以用丰富方法枚举(例如format,parse,...)

您可以扩展枚举以添加新值(使您的枚举final阻止它)

您可以获得所有可能值的列表(请参见下文)

此Enum类无意替换类常量,而仅在有意义时使用。

安装

composer require myclabs/php-enum

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

使用类常量的一个优点是能够将枚举用作参数类型:

_construct() 构造函数检查该值是否存在于枚举中

__toString()您可以echo $myValue,它将显示枚举值(常量的值)

getValue() 返回枚举的当前值

getKey() 返回枚举上当前值的键

equals()测试枚举实例是否相等(true如果枚举值相等false则返回,否则返回)

静态方法:

toArray() 方法以数组形式返回所有可能的值(键中为常数名,值中为常数值)

keys() 返回Enum类中所有常量的名称(键)

values() 返回所有Enum常量的Enum类的实例(键中为常量名,值中为Enum实例)

isValid() 检查测试值对枚举集是否有效

isValidKey() 检查测试的密钥在枚举集上是否有效

search() 检索值的返回键

use MyCLabs\Enum\Enum;

/**

* Action enum

*/

class Action extends Enum

{

private const VIEW = 'view';

private const EDIT = 'edit';

}

class Action extends Enum

{

private const VIEW = 'view';

private const EDIT = 'edit';

}

// Static method:

$action = Action::VIEW();

$action = Action::EDIT();

SplEnum提供了在PHP中本地模拟和创建枚举对象的功能。

class Month extends SplEnum {

const __default = self::January;

const January = 1;

const February = 2;

const March = 3;

const April = 4;

const May = 5;

const June = 6;

const July = 7;

const August = 8;

const September = 9;

const October = 10;

const November = 11;

const December = 12;

}

echo new Month(Month::June) . PHP_EOL;

try {

new Month(13);

} catch (UnexpectedValueException $uve) {

echo $uve->getMessage() . PHP_EOL;

}

?>

上面的示例将输出:

6

枚举月中的值不是const

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值