php枚举,PHP的Enum(枚举)的实现,phpenum枚举实现

* @link http://php4every1.com

*/

abstract class Enum {

/**

* Constant with default value for creating enum object

*/

const __default = null;

private $value;

private $strict;

private static $constants =array();

/**

* Returns list of all defined constants in enum class.

* Constants value are enum values.

*

* @param bool $includeDefault If true, default value is included into return

* @return array Array with constant values

*/

public function getConstList($includeDefault = false) {

$class = get_class($this);

if (!array_key_exists($class, self::$constants)) {

self::populateConstants();

}

return $includeDefault ?array_merge(self::$constants[__CLASS_],array(

"__default" => self::__default

)) : self::$constants[__CLASS_];

}

/**

* Creates new enum object. If child class overrides __construct(),

* it is required to call parent::__construct() in order for this

* class to work as expected.

*

* @param mixed $initialValue Any value that is exists in defined constants

* @param bool $strict If set to true, type and value must be equal

* @throws UnexpectedValueException If value is not valid enum value

*/

public function __construct($initialValue = null,$strict = true) {

$class = get_class($this);

if (!array_key_exists($class, self::$constants)) {

self::populateConstants();

}

if ($initialValue === null) {

$initialValue = self::$constants[$class]["__default"];

}

$temp = self::$constants[$class];

if (!in_array($initialValue,$temp,$strict)) {

throw new UnexpectedValueException("Value is not in enum " .$class);

}

$this->value =$initialValue;

$this->strict =$strict;

}

private function populateConstants() {

$class = get_class($this);

$r =new ReflectionClass($class);

$constants =$r->getConstants();

self::$constants =array(

$class =>$constants

);

}

/**

* Returns string representation of an enum. Defaults to

* value casted to string.

*

* @return string String representation of this enum's value

*/

public function __toString() {

return (string)$this->value;

}

/**

* Checks if two enums are equal. Only value is checked, not class type also.

* If enum was created with $strict = true, then strict comparison applies

* here also.

*

* @return bool True if enums are equal

*/

public function equals($object) {

if (!($object instanceof Enum)) {

return false;

}

return $this->strict ? ($this->value ===$object->value)

: ($this->value ==$object->value);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值