Heim php教程 php手册 PHP的Enum(枚举)的实现

PHP的Enum(枚举)的实现

Jun 12, 2016 pm 08:06 PM
enum php 代码 实现 开源 枚举 编程 编程语言 软件开发

转载请保留原文地址:http://www.cnblogs.com/zsxfbj/p/php_enum.html

PHP其实有Enum类库的,需要安装perl扩展,所以不是php的标准扩展,因此代码的实现需要运行的php环境支持。

(1)扩展类库SplEnum类。该类的摘要如下:

1

2

3

4

5

6

7

8

SplEnum extends SplType {

/* Constants */

const NULL __default = null ;

/* 方法 */

public array getConstList ([ bool $include_default = false ] )

/* 继承的方法 */

SplType::__construct ([ mixed $initial_value [, bool $strict ]] )

}

Nach dem Login kopieren

使用示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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

}

?>

Nach dem Login kopieren

 输出结果:

1

2

6

Value not a const in enum Month

Nach dem Login kopieren

 

(2)自定义的Enum类库

摘自http://www.php4every1.com/scripts/php-enum/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

<?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 <msufflaj32@gmail.com&gt

 * @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);

    }

}

Nach dem Login kopieren

使用示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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 __default

var_dump(new MyEnum());

 

try {

    new MyEnum("I don't exist");

} catch (UnexpectedValueException $e) {

    var_dump($e->getMessage());

}

Nach dem Login kopieren

输出结果如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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"

Nach dem Login kopieren

  

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Zwei -Punkte -Museum: Alle Exponate und wo man sie finden kann
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Der Schlüssel zum Programmieren: Die Leistungsfähigkeit von Python für Anfänger freischalten Der Schlüssel zum Programmieren: Die Leistungsfähigkeit von Python für Anfänger freischalten Oct 11, 2024 pm 12:17 PM

Python ist aufgrund seiner einfachen Erlernbarkeit und leistungsstarken Funktionen eine ideale Einführungssprache in die Programmierung für Anfänger. Zu seinen Grundlagen gehören: Variablen: werden zum Speichern von Daten (Zahlen, Zeichenfolgen, Listen usw.) verwendet. Datentyp: Definiert den Datentyp in der Variablen (Ganzzahl, Gleitkomma usw.). Operatoren: werden für mathematische Operationen und Vergleiche verwendet. Kontrollfluss: Kontrollieren Sie den Fluss der Codeausführung (bedingte Anweisungen, Schleifen).

Problemlösung mit Python: Erschließen Sie leistungsstarke Lösungen als Programmieranfänger Problemlösung mit Python: Erschließen Sie leistungsstarke Lösungen als Programmieranfänger Oct 11, 2024 pm 08:58 PM

Python unterstützt Anfänger bei der Problemlösung. Seine benutzerfreundliche Syntax, umfangreiche Bibliothek und Funktionen wie Variablen, bedingte Anweisungen und Schleifen ermöglichen eine effiziente Codeentwicklung. Von der Datenverwaltung über die Steuerung des Programmablaufs bis hin zur Ausführung wiederkehrender Aufgaben bietet Python

C entmystifizieren: Ein klarer und einfacher Weg für neue Programmierer C entmystifizieren: Ein klarer und einfacher Weg für neue Programmierer Oct 11, 2024 pm 10:47 PM

C ist eine ideale Wahl für Anfänger, um die Systemprogrammierung zu erlernen. Es enthält die folgenden Komponenten: Header-Dateien, Funktionen und Hauptfunktionen. Ein einfaches C-Programm, das „HelloWorld“ drucken kann, benötigt eine Header-Datei mit der Standard-Eingabe-/Ausgabe-Funktionsdeklaration und verwendet zum Drucken die printf-Funktion in der Hauptfunktion. C-Programme können mit dem GCC-Compiler kompiliert und ausgeführt werden. Nachdem Sie die Grundlagen beherrschen, können Sie mit Themen wie Datentypen, Funktionen, Arrays und Dateihandhabung fortfahren, um ein kompetenter C-Programmierer zu werden.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

See all articles