Enum (enumeration) usage example in PHP

Source: Internet
Author: User
This article mainly introduces the Enum (enumeration) usage in PHP, and analyzes in detail the implementation and use of Enum (enumeration) in php based on the instance form, which has some reference value, for more information about how to use Enum in PHP, see the following example. We will share this with you for your reference. The details are as follows:

PHP actually has an Enum class library and requires the installation of perl extensions. Therefore, it is not a standard extension of php. Therefore, the implementation of code requires the support of the running php environment.

(1) extension class library SplEnum class. The summary of this class is as follows:

SplEnum extends SplType {/* Constants */const NULL _ default = null;/* method */public array getConstList ([bool $ include_default = false]) /* inherited method */SplType :__ construct ([mixed $ initial_value [, bool $ strict])}

Example:

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

Output result:

6Value not a const in enum Month

(2) custom Enum class library

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

Example:

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());}

The output result is as follows:

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"

I hope this article will help you with PHP programming.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.