麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

PHP中Enum(枚舉)用法實例詳解

2024-05-04 23:40:45
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP中Enum(枚舉)用法,結合實例形式較為詳細的分析了php中Enum(枚舉)的實現與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
 

本文實例講述了PHP中Enum(枚舉)用法。分享給大家供大家參考,具體如下:

PHP其實有Enum類庫的,需要安裝perl擴展,所以不是php的標準擴展,因此代碼的實現需要運行的php環境支持。

(1)擴展類庫SplEnum類。該類的摘要如下:

SplEnum extends SplType {/* Constants */const NULL __default = null ;/* 方法 */public array getConstList ([ bool $include_default = false ] )/* 繼承的方法 */SplType::__construct ([ mixed $initial_value [, bool $strict ]] )}

使用示例:

<?phpclass 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;}?>

輸出結果:

6Value not a const in enum Month

(2)自定義的Enum類庫

<?php/** * Abstract class that enables creation of PHP enums. All you * have to do is extend this class and define some constants. * Enum is an object with value from on of those constants * (or from on of superclass if any). There is also * __default constat that enables you creation of object * without passing enum value. * * @author Marijan Šuflaj <[email protected]> * @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);  }}

使用示例如下:

class MyEnum extends Enum {  const HI = "Hi";  const BY = "By";  const NUMBER = 1;  const __default = self::BY;}var_dump(new MyEnum(MyEnum::HI));var_dump(new MyEnum(MyEnum::BY));//Use __defaultvar_dump(new MyEnum());try {  new MyEnum("I don't exist");} catch (UnexpectedValueException $e) {  var_dump($e->getMessage());}

輸出結果如下:

object(MyEnum)#1 (2) { ["value":"Enum":private]=> string(2) "Hi" ["strict":"Enum":private]=> bool(true)}object(MyEnum)#1 (2) { ["value":"Enum":private]=> string(2) "By" ["strict":"Enum":private]=> bool(true)}object(MyEnum)#1 (2) { ["value":"Enum":private]=> string(2) "By" ["strict":"Enum":private]=> bool(true)}string(27) "Value is not in enum MyEnum"

希望本文所述對大家PHP程序設計有所幫助。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美成人二区 | 国产精品刺激对白麻豆99 | 国产99久久精品一区二区 | 1314av| 欧美一级黄色录像片 | 九九热九九热 | 成人 日韩| 毛片在线免费观看完整版 | 久久久久免费精品 | 久久久久久久久久久久免费 | 最新av网址在线观看 | 亚洲五码在线观看视频 | 久久精品一区二区三 | 国产精品伦视频看免费三 | 狠狠干五月天 | 91专区在线观看 | 在线播放中文 | 久久毛片免费 | 国内精品伊人久久 | jizzzzxxxxx| www.91sese| 激情国产视频 | 成人在线97| 久久99国产精品久久99果冻传媒 | 久久福利国产 | 免费久久久久 | 免费久久久 | 国产88久久久国产精品免费二区 | 欧美日韩专区国产精品 | 欧美五月婷婷 | 色域tv| 久久艹综合 | 国产91九色 | 成人在线视频网 | 蜜桃网在线观看 | 久久国产成人午夜av浪潮 | 亚洲精品日韩色噜噜久久五月 | 日本xxxx视频 | 孕妇体内谢精满日本电影 | 日韩欧美中文字幕视频 | 日本在线视频免费观看 |