久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

PHP回退(Backed)枚舉

2023-12-22 188

一、簡(jiǎn)介

PHP回退(Backed)枚舉是一種特殊類型的枚舉,它與普通枚舉不同之處在于,它的值存儲(chǔ)在數(shù)組中而不是直接定義。這種枚舉類型可以提高性能和內(nèi)存利用率,因?yàn)樗恍枰獮槊總€(gè)枚舉常量分配內(nèi)存空間。

二、示例

默認(rèn)情況下枚舉條目實(shí)現(xiàn)形式不是標(biāo)量。 它們是純粹的對(duì)象實(shí)例。 不過,很多時(shí)候也需要在數(shù)據(jù)庫(kù)、數(shù)據(jù)存儲(chǔ)對(duì)象中來回讀寫枚舉條目。 因此,能夠內(nèi)置支持標(biāo)量形式也很有用(更易序列化)。

按以下語(yǔ)法,定義標(biāo)量形式的枚舉:

<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}
?>

由于有標(biāo)量的條目回退(Backed)到一個(gè)更簡(jiǎn)單值,又叫回退條目(Backed Case), 包含所有回退條目的 Enum 又叫“回退 Enum”(Backed Enum), 回退 Enum 只能包含回退條目, 純粹 Enum 只能包含純粹條目。

回退枚舉僅能回退到 int 或 string 里的一種類型, 且同時(shí)僅支持使用一種類型(就是說,不能聯(lián)合 int|string)。 如果枚舉為標(biāo)量形式,所有的條目必須明確定義唯一的標(biāo)量值。 無法自動(dòng)生成標(biāo)量(比如:連續(xù)的數(shù)字)。 回退條目必須是唯一的;兩個(gè)回退條目不能有相同的標(biāo)量。 然而,也可以用常量引用到條目,實(shí)際上是創(chuàng)建了個(gè)別名。 參見 枚舉常量。

條目等同的值,必須是個(gè)字面量或它的表達(dá)式。 不能是常量和常量表達(dá)式。 換言之,允許 1 + 1, 不允許 1 + SOME_CONST。回退條目有個(gè)額外的只讀屬性 value, 它是定義時(shí)指定的值。

<?php
print Suit::Clubs->value;
// 輸出 "C"
?>

為了確保 value 的只讀性, 無法將變量傳引用給它。 也就是說,以下會(huì)拋出錯(cuò)誤:

<?php
$suit = Suit::Clubs;
$ref = &$suit->value;
// Error: Cannot acquire reference to property Suit::$value
?>

回退枚舉實(shí)現(xiàn)了內(nèi)置的 BackedEnum interface, 暴露了兩個(gè)額外的方法:

  • from(int|string): self 能夠根據(jù)標(biāo)量返回對(duì)應(yīng)的枚舉條目。 如果找不到該值,會(huì)拋出 ValueError。 主要用于輸入標(biāo)量為可信的情況,使用一個(gè)不存在的枚舉值,可以考慮為需終止應(yīng)用的錯(cuò)誤;
  • tryFrom(int|string): ?self 能夠根據(jù)標(biāo)量返回對(duì)應(yīng)的枚舉條目。 如果找不到該值,會(huì)返回 null。 主要用于輸入標(biāo)量不可信的情況,調(diào)用者需要自己實(shí)現(xiàn)默認(rèn)值的邏輯或錯(cuò)誤的處理。

from() 和 tryFrom() 方法也遵循基本的嚴(yán)格/松散類型規(guī)則。 系統(tǒng)在弱類型模式下接受傳入 integer 和 string,并自動(dòng)強(qiáng)制轉(zhuǎn)換對(duì)應(yīng)值。 傳入 float 也能運(yùn)行,并且強(qiáng)制轉(zhuǎn)換。 在嚴(yán)格類型模式下,為 string 回退枚舉的 from() 傳入 integer 會(huì)導(dǎo)致 TypeError,反之亦然;float 都會(huì)出現(xiàn)有問題。 其他所有的參數(shù)類型,在以上所有模式中都會(huì)拋出 TypeError。

<?php
$record?=?get_stuff_from_database($id);
print?$record['suit'];

$suit?=??Suit::from($record['suit']);
//?無效數(shù)據(jù)拋出?ValueError:"X"?is?not?a?valid?scalar?value?for?enum?"Suit"
print?$suit->value;

$suit?=?Suit::tryFrom('A')????Suit::Spades;
//?無效數(shù)據(jù)返回?null,因此會(huì)用?Suit::Spades?代替。
print?$suit->value;
?>

手動(dòng)為回退枚舉定義 from() 或 tryFrom() 方法會(huì)導(dǎo)致 fatal 錯(cuò)誤。

  • 廣告合作

  • QQ群號(hào):4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請(qǐng)注明出處“站長(zhǎng)百科”和原文地址。
PHP回退(Backed)枚舉
上一篇: PHP枚舉基礎(chǔ)
PHP回退(Backed)枚舉
下一篇: Kubernetes Windows Pod