PHP枚舉的含義以及用法

本篇內(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來覆蓋此行為。

# Listing enum values

您可以使用靜態(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,
] */

# 枚舉對(duì)象

我已經(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ù)組鍵

由于枚舉值實(shí)際上是對(duì)象,因此目前無法將它們用作數(shù)組鍵。以下將導(dǎo)致錯(cuò)誤:

$list = [Status::DRAFT => 'draft',// …];

這意味著您只能在SplObjectStorage和WeakMaps中將枚舉用作鍵。

# Traits

枚舉可以像類一樣使用特征,但有更多限制。您不允許覆蓋內(nèi)置的枚舉方法,并且它們不能包含類屬性-枚舉中禁止使用這些屬性。

# Reflection and attributes

正如預(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)

外貿(mào)網(wǎng)站制作