本篇內(nèi)容主要講解“PHP枚舉的含義以及用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“PHP枚舉的含義以及用法”吧!
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元銅陵做網(wǎng)站,已為上家服務(wù),為銅陵各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
像往常一樣,使用我的PHP函數(shù)帖子,我們從高級(jí)概述開始,枚舉是什么樣的:
enum Status{case DRAFT;case PUBLISHED;case ARCHIVED; }
枚舉的好處是它們代表了一個(gè)常量值的集合,但最重要的是可以輸入這些值,如:
class BlogPost{public function __construct(public Status $status, ) {} }
在此示例中,創(chuàng)建枚舉并將其傳遞給 blogpost
如下所示:
$post = new BlogPost(Status::DRAFT);
這是基本的方式,因?yàn)槟憧梢钥吹經(jīng)]有任何復(fù)雜的事情。
枚舉可以定義方法,就像類一樣。這是一個(gè)非常強(qiáng)大的函數(shù),特別是與 match
運(yùn)算符配合使用:
enum Status{case DRAFT;case PUBLISHED;case ARCHIVED; public function color(): string{return match($this) {Status::DRAFT => 'grey', Status::PUBLISHED => 'green', Status::ARCHIVED => 'red', }; } }
方法可以如此使用:
$status = Status::ARCHIVED; $status->color(); // 'red'
允許靜態(tài)方法:
enum Status{// …public static function make(): Status{// …} }
您也可以使用 self
:
enum Status{// …public function color(): string{return match($this) {self::DRAFT => 'grey', self::PUBLISHED => 'green', self::ARCHIVED => 'red', }; } }
枚舉可以實(shí)現(xiàn)接口,就像普通類一樣:
interface HasColor{public function color(): string; }
enum Status implements HasColor{case DRAFT;case PUBLISHED;case ARCHIVED; public function color(): string { /* … */ } }
枚舉值由內(nèi)部的對(duì)象表示,但如果您愿意,可以為它們分配一個(gè)值;
enum Status: string{case DRAFT = 'draft';case PUBLISHED = 'published';case ARCHIVED = 'archived'; }
注意枚舉定義中的類型聲明。它表示所有枚舉值都是給定類型的。您也可以使其成為 int
。請(qǐng)注意,僅 int
和 String
被允許作為枚舉值。
enum Status: int{case DRAFT = 1;case PUBLISHED = 2;case ARCHIVED = 3; }
鍵入枚舉的技術(shù)術(shù)語被稱為"backed enums",因?yàn)樗鼈儽桓?jiǎn)單的值"backed"。如果您決定分配枚舉值,則所有情況都應(yīng)具有值。
如果您要合并支持的枚舉和接口,則枚舉類型必須直接在枚舉名稱之后,在Implements關(guān)鍵字之前。
enum Status: string implements HasColor{case DRAFT = 'draft';case PUBLISHED = 'published';case ARCHIVED = 'archived'; // …}
如果要為enum分配值,則可能需要一種序列化和反序列化它們的方法。序列化意味著您需要一種訪問枚舉值的方法。這是通過只讀公共屬性完成的:
$value = Status::PUBLISHED->value; // 2
可以通過使用Enum::from
$status = Status::from(2); // Status::PUBLISHED
還有一個(gè) tryfrom
,它返回 null
如果通過了未知值。如果您使用 from
將存在異常。
$status = Status::from('unknown'); // ValueError$status = Status::tryFrom('unknown'); // null
請(qǐng)注意,您還可以對(duì)枚舉使用內(nèi)置的序列化(serialize)和反序列化(unsermalize)功能。此外,您可以將json_encode與支持的枚舉結(jié)合使用,其結(jié)果將是枚舉值??梢酝ㄟ^實(shí)現(xiàn)JsonSerializable來覆蓋此行為。
您可以使用靜態(tài)的 Enum::cases()
方法獲取枚舉中所有可用值的列表:
Status::cases();/* [ Status::DRAFT, Status::PUBLISHED, Status::ARCHIVED ] */
請(qǐng)注意,此數(shù)組包含實(shí)際的枚舉對(duì)象:
array_map(fn(Status $status) => $status->color(), Status::cases() );
使用支持的枚舉時(shí),數(shù)組鍵將包含枚舉值:
Status::cases();/* [ 'draft' => Status::DRAFT, 'published' => Status::PUBLISHED, 'archived' => Status::ARCHIVED, ] */
我已經(jīng)提到枚舉值表示為對(duì)象,實(shí)際上這些是單例對(duì)象。這意味著您可以與它們進(jìn)行比較:
$statusA = Status::PENDING; $statusB = Status::PENDING; $statusC = Status::ARCHIVED; $statusA === $statusB; // true$statusA === $statusC; // false$statusC instanceof Status; // true
由于枚舉值實(shí)際上是對(duì)象,因此目前無法將它們用作數(shù)組鍵。以下將導(dǎo)致錯(cuò)誤:
$list = [Status::DRAFT => 'draft',// …];
這意味著您只能在SplObjectStorage和WeakMaps中將枚舉用作鍵。
枚舉可以像類一樣使用特征,但有更多限制。您不允許覆蓋內(nèi)置的枚舉方法,并且它們不能包含類屬性-枚舉中禁止使用這些屬性。
正如預(yù)期的那樣,有幾個(gè)用于處理枚舉的反射類: Reflectionenum
, ReflectenumunitCase
和 ReflecteneNumbackedCase
。還有一個(gè)新的 enum_exists
函數(shù),它是它的名字所建議的。
到此,相信大家對(duì)“PHP枚舉的含義以及用法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)站題目:PHP枚舉的含義以及用法
新聞來源:http://muchs.cn/article26/jioejg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、全網(wǎng)營銷推廣、手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)