PHP枚舉是傳統(tǒng)恒定群體的現(xiàn)代,更安全的替代品。 1。它們提供類型的安全性,防止無效值。 2。它們可以實(shí)現(xiàn)IDE自動(dòng)完成和更好的工具支持。 3。它們是可在類型提示中使用的一流類型和檢查。 4。它們?cè)试S通過案例()進(jìn)行迭代。 5。它們支持案例的方法和行為。背面的枚舉映射到標(biāo)量值,而純枚舉代表身份。當(dāng)您擁有固定的選項(xiàng)集,將字符串/整數(shù)用于狀態(tài)時(shí)遷移,或者需要更好的類型安全性和工具。枚舉是對(duì)恒定組的基本升級(jí),應(yīng)在PHP 8.1中用于新代碼。
PHP枚舉確實(shí)是傳統(tǒng)恒定群體的現(xiàn)代,更強(qiáng)大的替代品 - 這一轉(zhuǎn)變使PHP與其他現(xiàn)代編程語言一致。如果您一直使用類常數(shù)或全局常數(shù)來表示固定的值集(例如狀態(tài)代碼,用戶角色或訂單狀態(tài)),則枚舉提供了一種更清潔,更安全,更具表現(xiàn)力的方法來執(zhí)行此操作。

讓我們分解為什么枚舉被視為繼任者以及他們?nèi)绾胃纳婆f方式。
為什么傳統(tǒng)的常數(shù)小組不足
在PHP 8.1引入枚舉之前,開發(fā)人員經(jīng)常使用類常數(shù)來模擬枚舉類型:

階級(jí)Orderstatus { const待定='待定'; const運(yùn)送='運(yùn)送'; const交付=“交付”; }
或有時(shí)包含全球常數(shù)列表:
定義('status_pending',“待處理”); 定義('status_shipped','sparting'); // ...
這些方法有幾個(gè)問題:

- ?沒有類型的安全性 - 沒有什么可以阻止您傳遞
'cancelled'
(拼寫錯(cuò)誤)甚至整數(shù)。 - ?超出基本恒定查找以外的自動(dòng)完成或IDE支持。
- ?無法迭代可能的值。
- ?恒定名稱及其值之間沒有區(qū)別 - 它們松散地耦合。
您可以使用輔助方法處理其中的一些,但它容易出錯(cuò)且容易出錯(cuò)。
枚舉帶來類型的安全性和清晰度
使用PHP枚舉(后備或純),您可以定義一組封閉的允許值,并且類型系統(tǒng)會(huì)執(zhí)行它。
基本枚舉示例
枚舉Orderstatus:字符串 { 案例待定='待定'; 案件發(fā)貨='已發(fā)貨'; 案件交付='交付'; }
現(xiàn)在您可以鍵入Hint參數(shù):
功能UpdateStatus(Orderstatus $狀態(tài)):void { // $狀態(tài)保證是三種情況之一 }
這樣可以防止錯(cuò)誤傳遞的字符串或錯(cuò)誤類型的錯(cuò)誤。
枚舉比恒定組的關(guān)鍵優(yōu)勢
?1。類型安全
您不能意外地通過'Pendng'
或null
即OrderStatus
(如果經(jīng)過正確的字體檢查)。
?2。自動(dòng)完成和工具支持
IDE可以建議有效的枚舉案例,減少錯(cuò)別字并改善開發(fā)人員的經(jīng)驗(yàn)。
?3。一流的公民
枚舉是實(shí)際類型。您可以在類型的提示中使用它們,可以安全地序列化/進(jìn)行序列化。
?4。迭代
您可以在所有情況下循環(huán):
foreach(orderstatus :: case()為$ case){ 回聲$ case->值。 “ \ n”; }
沒有手動(dòng)陣列的普通常數(shù)是不可能的。
?5。方法和邏輯
您可以將方法添加到枚舉:
枚舉Orderstatus:字符串 { 案例待定='待定'; 案件發(fā)貨='已發(fā)貨'; 案件交付='交付'; 公共功能isfinal():bool { 返回$ this === self ::已交付; } }
現(xiàn)在,每種情況都具有行為,而不僅僅是數(shù)據(jù)。
支持的與純粹的枚舉
PHP都支持兩者:
- 后面的枚舉具有標(biāo)
value
(字符串或int),在映射到數(shù)據(jù)庫值時(shí)很有用。 - 純枚舉不需要后盾值,只有在情況的身份很重要時(shí)就被使用。
//支持 Enum userrole:字符串 { case admin ='admin'; 案例用戶='用戶'; } // 純的 枚舉httpstatus { 案例確定; case not_found; case server_error; }
純枚舉非常適合標(biāo)簽是事物的狀態(tài)機(jī)器或標(biāo)志。
您什么時(shí)候應(yīng)該遷移?
您明天不需要重寫所有常數(shù),但是對(duì)于新的代碼或關(guān)鍵域(例如狀態(tài),權(quán)限,州),枚舉是更好的選擇。
考慮切換何時(shí):
- 您有固定的已知選項(xiàng)集。
- 您正在使用字符串或整數(shù)來表示狀態(tài)。
- 您正在進(jìn)行字符串比較
if ($status === 'pending')
。 - 您需要更好的類型安全和IDE支持。
底線
PHP枚舉不僅是句法糖 - 它們是對(duì)恒定組的基本升級(jí)。它們?yōu)槟I入安全性,更好的工具,迭代以及將邏輯附加到常數(shù)的能力。
如果您在PHP 8.1上,則幾乎沒有理由繼續(xù)使用類常數(shù)來枚舉值。枚舉是現(xiàn)代,更安全,更具表現(xiàn)力的方式。
基本上,如果您仍在為狀態(tài)或類型定義const
組,那么該是時(shí)候升級(jí)了。
以上是PHP枚舉:傳統(tǒng)常數(shù)團(tuán)體的現(xiàn)代繼任者的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)代碼編輯軟件(SublimeText3)

PhpeValuatesConstantExpressatAtcompiletimetoetimetoemetotocreveranceandearlyerrordetection.1.ConstantExpressepressevaluationMeanScomputingValuesDuruesduresduresduring-CompiLation -whenalloperandSareSareSareConconstantSareConconstantsLikeLiterals,classConstants,classConstants,classConstants,orpredefendinedconcontantstants.2.phpp'2.php’2.php’2.2.php’2.php’2.php’2.php’2.php’2.php’sse

?Yes,constantsarefasterthanvariablesincompiledlanguagesduetocompile-timeevaluationandinlining.1.Constantsareevaluatedatcompiletime,enablingvalueinlining,constantfolding,andeliminationofmemoryallocation,whilevariablesrequireruntimeresolutionandmemorya

Namespacingpreventsconstantcollisionsinlarge-scalesoftwareprojectsbygroupingrelatedconstantswithinuniquescopes.1)Constants,whichshouldremainunchangedduringruntime,cancausenamingconflictswhendefinedglobally,asdifferentmodulesorlibrariesmayusethesamena

PHPdoesnotallowconstantredeclarationbetweentraitsandclasses,resultinginafatalerrorwhenduplicateconstantnamesoccuracrosstraits,parentclasses,orchildclasses;1)constantsintraitsarecopieddirectlyintotheusingclassatcompiletime;2)ifaclassdefinesaconstantwi

PHP的7個(gè)魔術(shù)常量是__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__TRAIT__、__METHOD__,它們能動(dòng)態(tài)返回代碼位置和上下文信息,1.LINE返回當(dāng)前行號(hào),用于精準(zhǔn)調(diào)試;2.FILE返回當(dāng)前文件的絕對(duì)路徑,常用于可靠地引入文件或定義根目錄;3.DIR返回當(dāng)前文件所在目錄,比dirname(__FILE__)更清晰高效;4.FUNCTION返回當(dāng)前函數(shù)名,適用于函數(shù)級(jí)日志跟蹤;5.CLASS返回當(dāng)前類名(含命名空間),在日志和工廠

優(yōu)先使用const,因?yàn)樗诰幾g時(shí)解析,性能更好且支持命名空間;2.當(dāng)需要在條件、函數(shù)中定義常量或使用動(dòng)態(tài)名稱時(shí),必須使用define();3.類中只能使用const定義常量;4.define()可在運(yùn)行時(shí)動(dòng)態(tài)定義并支持表達(dá)式和完整命名空間字符串;5.兩者一旦定義均不可修改,但define()可通過defined()避免重復(fù)定義,而const不能檢查;6.const名稱必須為字面量,不支持變量插值。因此,const適用于固定、明確的常量,define()適用于需要運(yùn)行時(shí)邏輯或動(dòng)態(tài)命名的場景,選擇

constantssshouldbovedtoenforceimmutabilityInphpforBetterCodeClarityAndSafety; 1)useconstantsforconfigurationanddomainlogiclikiclikestatuscodesorappointpointpointpointstoavoidmagicvalues; 2)

Php8.1 EnumsSprovidEteTyEtePesafetyOverClassConstantsByEnablingNativeTypeHintsAndCompile timeValidation.1.ClassConstantSlackTyPeenForecement,允許InvalidStringStoBepAssed.2.pureandbackedenums(E.G.,EnumorderStatus:string crarevare)
