亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
1。使用類(lèi)常數(shù)進(jìn)行類(lèi)型安全性(PHP PRED 8.1方法)
2。枚舉8.1中的枚舉:真正的類(lèi)型安全
基本(純)枚舉
標(biāo)量映射的後備枚舉
3。帶枚舉的類(lèi)型安全代碼的最佳實(shí)踐
4。將枚舉與元數(shù)據(jù)的屬性(PHP 8)相結(jié)合
最後的想法
首頁(yè) 後端開(kāi)發(fā) php教程 通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全

通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全

Jul 30, 2025 am 01:23 AM
PHP Constants

PHP 8.1枚舉通過(guò)啟用本地類(lèi)型的提示和編譯時(shí)間驗(yàn)證,為類(lèi)常數(shù)提供了真正的類(lèi)型安全。 1。類(lèi)常數(shù)缺乏類(lèi)型執(zhí)行,可以通過(guò)無(wú)效的字符串。 2。純淨(jìng)和背面的枚舉(例如,枚舉Orderstatus:字符串)確保僅接受有效的情況,以防止類(lèi)型錯(cuò)誤。 3。使用後排枚舉進(jìn)行數(shù)據(jù)庫(kù)/API映射,狀態(tài)標(biāo)誌的純枚舉。 4.應(yīng)用最佳實(shí)踐:嚴(yán)格鍵入,詳盡處理的匹配表達(dá)式以及用於安全輸入驗(yàn)證的TryFrom()。 5。增強(qiáng)具有屬性的枚舉,以將元數(shù)據(jù)像標(biāo)籤一樣。從常數(shù)遷移到枚舉可以提高代碼安全性,可讀性和IDE支持,使其非常適合固定價(jià)值集(例如狀態(tài)或角色)。

通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全

近年來(lái),PHP已經(jīng)顯著發(fā)展,並且隨著諸如類(lèi)常數(shù),後備和純粹枚舉(從PHP 8.1)等功能引入功能,開(kāi)發(fā)人員現(xiàn)在擁有強(qiáng)大的工具來(lái)強(qiáng)制執(zhí)行類(lèi)型的安全性,尤其是在處理固定值集時(shí)。這對(duì)於減少錯(cuò)誤,提高代碼可讀性以及實(shí)現(xiàn)更好的IDE支持和靜態(tài)分析至關(guān)重要。

通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全

這是您可以有效地利用班級(jí)常數(shù)枚舉來(lái)實(shí)現(xiàn)現(xiàn)代PHP應(yīng)用中的類(lèi)型安全性的方法。


1。使用類(lèi)常數(shù)進(jìn)行類(lèi)型安全性(PHP PRED 8.1方法)

在引入枚舉之前,一個(gè)常見(jiàn)的模式是定義類(lèi)中的相關(guān)常數(shù),並將其與類(lèi)型提示或驗(yàn)證配對(duì)。

通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全
階級(jí)Orderstatus
{
    公共const等待='待定';
    公共銷(xiāo)售='運(yùn)送';
    公共const交付=“交付”;
    公共const取消='取消';
}

然後,您可以在您的應(yīng)用程序上使用這些常數(shù):

函數(shù)updateStatus(字符串$狀態(tài)):void
{
    if(!in_array($ status,[[
        Orderstatus ::等待,
        Orderstatus ::運(yùn)送,
        Orderstatus ::交付,
        Orderstatus ::取消,
    ], 真的)) {
        拋出新的無(wú)效Exception('無(wú)效狀態(tài)');
    }

    //繼續(xù)更新
}

限制:

通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全
  • 沒(méi)有本機(jī)類(lèi)型約束: $status仍然只是一個(gè)string 。
  • 沒(méi)有編譯時(shí)驗(yàn)證。
  • 易於通過(guò)不屬於允許集的任意字符串。

這種方法提高了一致性,但不能在語(yǔ)言層面提供實(shí)際類(lèi)型的安全性。


2。枚舉8.1中的枚舉:真正的類(lèi)型安全

使用PHP 8.1,引入了枚舉,使您可以定義具有實(shí)際類(lèi)型的固定值。

基本(純)枚舉

枚舉Orderstatus:字符串
{
    案例待定='待定';
    案件發(fā)貨='已發(fā)貨';
    案件交付='交付';
    案例取消='取消';
}

現(xiàn)在,您可以使用枚舉直接鍵入含義:

功能UpdateStatus(Orderstatus $狀態(tài)):void
{
    // $狀態(tài)保證是定義的案例之一
    迴聲“更新到:”。 $ status-> value;
}

用法:

 UpdateStatus(Orderstatus ::運(yùn)送); //正確
updateStatus('運(yùn)送'); //?typeError:預(yù)期的Orderstatus,獲得了字符串

這是真正的類(lèi)型安全:只能通過(guò)有效的枚舉案例。


標(biāo)量映射的後備枚舉

上面的OrderStatus是一個(gè)後備枚舉(它具有: string襯裡類(lèi)型),這意味著每個(gè)情況都映射到標(biāo)量值。您還可以創(chuàng)建無(wú)背景值的純枚舉(對(duì)於狀態(tài)標(biāo)誌很有用):

枚舉優(yōu)先級(jí)
{
    案例低;
    案例培養(yǎng)基;
    案例高;
}

即使沒(méi)有標(biāo)量值,您仍然可以在通過(guò)Priority::HIGH ,等等。


3。帶枚舉的類(lèi)型安全代碼的最佳實(shí)踐

完全受益於枚舉並避免常見(jiàn)的陷阱:

  • ?在表示固定的選項(xiàng)集時(shí),請(qǐng)始終在字符串/int常數(shù)上使用枚舉。
  • ?當(dāng)您需要持久價(jià)值時(shí)(例如,在數(shù)據(jù)庫(kù)或API中) ,更喜歡後備枚舉。
  • ?使用嚴(yán)格的鍵入declare(strict_types=1); )確保執(zhí)行類(lèi)型檢查。
  • ?利用匹配表達(dá)式進(jìn)行安全,詳盡的處理:
功能getStatuslabel(orderstatus $ status):字符串
{
    返回匹配($ status){
        Orderstatus :: perfend =>'等待發(fā)貨',
        orderstatus :: spiend =>'在路上',
        orderstatus :: varvifeed =>'交付',
        orderstatus :: casuted =>'取消訂單',
    };
}
  • ?從外部來(lái)源進(jìn)行補(bǔ)水時(shí)早期驗(yàn)證輸入
 $ status = orderstatus :: tryfrom($ _ post ['status']) 
    ?拋出新的無(wú)效Exception('無(wú)效狀態(tài)');

4。將枚舉與元數(shù)據(jù)的屬性(PHP 8)相結(jié)合

您可以增強(qiáng)具有附加元數(shù)據(jù)屬性的枚舉(例如,標(biāo)籤,顏色,權(quán)限):

 #[屬性]
班級(jí)標(biāo)籤
{
    公共功能__construct(public String $ text){}
}

枚舉優(yōu)先級(jí)
{
    #[label('低優(yōu)先級(jí)')]
    案例低;

    #[label('中等優(yōu)先級(jí)')]
    案例培養(yǎng)基;

    #[label('高優(yōu)先級(jí)')]
    案例高;

    公共功能標(biāo)籤():字符串
    {
        $ Reflector = new \ reflecleteNumcase(self :: class,$ this-> name);
        $ attribute = $ Reflector-> getAttributes(label :: class)[0] ??無(wú)效的;
        返回$屬性? - > newinstance() - >文本?? $ this-> name;
    }
}

現(xiàn)在Priority::HIGH->label()返回'High Priority' 。


最後的想法

儘管班級(jí)常數(shù)有助於組織價(jià)值,但他們?nèi)狈?shí)際的執(zhí)法。 PHP 8.1中的枚舉縮小了差距,提供:

  • 編譯時(shí)間(或運(yùn)行時(shí))類(lèi)型安全
  • 詳盡的案例處理通過(guò)match
  • 與數(shù)據(jù)庫(kù)和API的互操作性->value
  • IDE自動(dòng)完成和重構(gòu)支持

對(duì)於新項(xiàng)目,每當(dāng)您對(duì)一組有限的選項(xiàng)建模時(shí),都要支持枚舉。結(jié)果是更清潔,更安全,更可維護(hù)的代碼。

基本上,如果您仍在使用字符串常數(shù)作為狀態(tài),角色或類(lèi)型,請(qǐng)考慮升級(jí)到枚舉。這不僅是語(yǔ)法改進(jìn);這是邁向健壯,自我紀(jì)念的PHP的真正一步。

以上是通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Laravel 教程
1597
29
PHP教程
1488
72
了解PHP引擎中的恆定表達(dá)評(píng)估 了解PHP引擎中的恆定表達(dá)評(píng)估 Jul 29, 2025 am 05:02 AM

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

揭示PHP特徵和繼承中常數(shù)的行為 揭示PHP特徵和繼承中常數(shù)的行為 Jul 29, 2025 am 03:58 AM

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

性能範(fàn)式:分析常數(shù)與變量的速度 性能範(fàn)式:分析常數(shù)與變量的速度 Jul 30, 2025 am 05:41 AM

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

具有不變性的架構(gòu):PHP中常數(shù)的戰(zhàn)略使用 具有不變性的架構(gòu):PHP中常數(shù)的戰(zhàn)略使用 Jul 29, 2025 am 04:52 AM

constantssshouldbovedtoenforceimmutabilityInphpforBetterCodeClarityAndSafety; 1)useconstantsforconfigurationanddomainlogiclikiclikestatuscodesorappointpointpointpointstoavoidmagicvalues; 2)

名稱(chēng)和常數(shù):避免在大型項(xiàng)目中發(fā)生碰撞 名稱(chēng)和常數(shù):避免在大型項(xiàng)目中發(fā)生碰撞 Jul 30, 2025 am 05:35 AM

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

`define() `define() Jul 30, 2025 am 05:02 AM

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

揭開(kāi)PHP的魔術(shù)常數(shù)用於上下文感知應(yīng)用程序 揭開(kāi)PHP的魔術(shù)常數(shù)用於上下文感知應(yīng)用程序 Jul 30, 2025 am 05:42 AM

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)前類(lèi)名(含命名空間),在日誌和工廠

通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全 通過(guò)PHP類(lèi)常數(shù)和枚舉實(shí)現(xiàn)類(lèi)型安全 Jul 30, 2025 am 01:23 AM

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

See all articles