W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Enum 類似 class,它和 class、interface、trait 共享同樣的命名空間。 也能用同樣的方式自動加載。 一個 Enum 定義了一種新的類型,它有固定、數(shù)量有限、可能的合法值。
<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}
?>
以上聲明了新的枚舉類型 Suit,僅有四個有效的值: Suit::Hearts、Suit::Diamonds、 Suit::Clubs、Suit::Spades。 變量可以賦值為以上有效值里的其中一個。 函數(shù)可以檢測枚舉類型,這種情況下只能傳入類型的值。
<?php
function pick_a_card(Suit $suit) { ... }
$val = Suit::Diamonds;
// OK
pick_a_card($val);
// OK
pick_a_card(Suit::Clubs);
// TypeError: pick_a_card(): Argument #1 ($suit) must be of type Suit, string given
pick_a_card('Spades');
?>
一個枚舉可以定義零個或多個case,且沒有最大數(shù)量限制。 雖然零個 case 的 enum 沒什么用處,但在語法上也是有效的。
枚舉條目的語法規(guī)則適用于 PHP 中的任何標簽,參見常量。
默認情況下,枚舉的條目(case)本質(zhì)上不是標量。 就是說 Suit::Hearts 不等同于 "0"。 其實,本質(zhì)上每個條目是該名稱對象的單例。具體來說:
<?php
$a = Suit::Spades;
$b = Suit::Spades;
$a === $b; // true
$a instanceof Suit; // true
?>
由于對象間的大小比較毫無意義,這也意味著 enum 值從來不會 < 或 > 其他值。 當 enum 的值用于比較時,總是返回 false。
這類沒有關聯(lián)數(shù)據(jù)的條目(case),被稱為“純粹條目”(Pure Case)。 僅包含純粹 Case 的 Enum 被稱為純粹枚舉(Pure Enum)。
枚舉類型里所有的純粹條目都是自身的實例。 枚舉類型在內(nèi)部的實現(xiàn)形式是一個 class。
所有的 case 有個只讀的屬性 name。 它大小寫敏感,是 case 自身的名稱。
<?php
print Suit::Spades->name;
// 輸出 "Spades"
?>
It is also possible to use the defined() and constant() functions to check for the existence of or read an enum case if the name is obtained dynamically. This is, however, discouraged as using Backed enums should work for most use cases.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: