受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