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

目錄
2.策略模式:用課程代替條件
3。查找表和簡(jiǎn)單映射的陣列
4.多態(tài)性:讓對(duì)象決定其行為
5。複雜工作流的狀態(tài)或命令模式
獎(jiǎng)勵(lì):使用match表達(dá)式(PHP 8)
首頁(yè) 後端開發(fā) php教程 超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代品

超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代品

Aug 01, 2025 am 07:41 AM
PHP Nested if Statement

使用警衛(wèi)條款提早退出並減少嵌套; 2.應(yīng)用策略模式,用類或可可替代條件; 3。用查找表或數(shù)組替換簡(jiǎn)單的映射; 4.採(cǎi)用多態(tài)性,以便對(duì)象決定其行為; 5。利用狀態(tài)或命令模式進(jìn)行複雜的工作流程;此外,將PHP 8匹配表達(dá)式用於清潔有條件的邏輯 - 這些技術(shù)統(tǒng)稱代碼,提高可讀性並通過將條件從主要邏輯移出來提高可維護(hù)性。

超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代品

當(dāng)PHP代碼開始用深層IF-ELSE塊堆積時(shí),很難讀取,測(cè)試和維護(hù)。雖然嵌套條件很常見,但仍有更乾淨(jìng),更可擴(kuò)展的替代方案。這是擺脫if-else金字塔的方法,而無(wú)需犧牲邏輯清晰度。

超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代品

1。後衛(wèi)條款:儘早退出,減少築巢

最簡(jiǎn)單但最有效的技術(shù)之一是使用Guard Crauses - 在功能開始時(shí)處理邊緣案例或無(wú)效狀態(tài)的早期返回。

而不是:

超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代品
功能processuser($ user){
    如果($ user!== null){
        如果($ user-> isAtive()){
            如果($ user-> haspermission()){
                //主要邏輯在這裡
                返回$ this-> sendwelcomeemail($ user);
            }
        }
    }
    返回false;
}

早期出口的重構(gòu):

功能processuser($ user){
    如果($ user === null)返回false;
    if(!$ user-> iSactive())返回false;
    如果(!$ user-> haspermission())返回false;

    返回$ this-> sendwelcomeemail($ user);
}

這將主要邏輯保持在頂層,並使功能更易於遵循。

超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代品

2.策略模式:用課程代替條件

當(dāng)您根據(jù)類型或狀態(tài)在多種行為之間進(jìn)行選擇時(shí),策略模式用類或可召喚的地圖代替了長(zhǎng)時(shí)間的if-else鏈。

例如,而不是:

功能colculateTax($ country,$ nocal){
    如果($ country ==='us'){
        退貨$金額 * 0.07;
    } elseif($ country ==='de'){
        退貨$金額 * 0.19;
    } elseif($ country ==='jp'){
        退貨$金額 * 0.10;
    }
    返回0;
}

使用策略圖:

 $ saxstrategies = [
    'us'=> fn($金額)=> $金額 * 0.07,
    'de'=> fn($金額)=> $金額 * 0.19,
    'jp'=> fn($金額)=> $金額 * 0.10,
];

功能colculateTax($ country,$金額,$策略){
    返回$ strategies [$ country]($金額)?? 0;
}

或進(jìn)一步進(jìn)行專門的類,以實(shí)現(xiàn)TaxStrategy界面,以更好地分離和可檢驗(yàn)性。


3。查找表和簡(jiǎn)單映射的陣列

許多If-Else梯子只是鑰匙到值映射。用數(shù)組替換它們。

而不是:

功能getStatuscolor($ status){
    如果($ status ==='active'){
        返回“綠色”;
    } elseif($ status ==='perdend'){
        返回“黃色”;
    } elseif($ status ==='intactive'){
        返回“灰色”;
    } elseif($ status ==='blocked'){
        返回“紅色”;
    }
    返回“未知”;
}

使用查找:

功能getStatuscolor($ status){
    $ colors = [
        'Active'=>'綠色',
        '等待'=>'黃色',
        '無(wú)活動(dòng)'=>'灰色',
        '阻止'=>'紅色'
    ];

    返回$顏色[$ status] ?? '未知';
}

它更快,清潔且易於從配置擴(kuò)展甚至加載。


4.多態(tài)性:讓對(duì)象決定其行為

如果您的條件取決於對(duì)像類型,請(qǐng)使用多態(tài)性。在基類或接口中定義方法,並讓子類實(shí)現(xiàn)自己的版本。

例子:

接口通知{
    public函數(shù)發(fā)送($消息);
}

班級(jí)電子郵件註釋實(shí)施通知{
    public函數(shù)發(fā)送($消息){ / *通過電子郵件發(fā)送 * /}發(fā)送
}

類SMSnotification實(shí)現(xiàn)通知{
    public函數(shù)發(fā)送($消息){ / *通過SMS * /}發(fā)送
}

//無(wú)需IF- else
函數(shù)通知(用戶$用戶,通知$ channel,$ msg){
    $ channel-> send($ msg);
}

現(xiàn)在,封裝了如何發(fā)送的決定 - 在呼叫站點(diǎn)上不需要條件。


5。複雜工作流的狀態(tài)或命令模式

對(duì)於基於狀態(tài)的複雜業(yè)務(wù)規(guī)則,請(qǐng)考慮狀態(tài)模式命令模式。這些使您能夠封裝行為和過渡,而無(wú)需龐大條件。

例如,在待處理,發(fā)貨或取消時(shí)行為不同的順序可以具有定義有效操作的自己的狀態(tài)對(duì)象。

或者,使用命令圖

 $ actions = [
    'create'=> new CreateOrderHandler(),
    'CANCAL'=> new CancelorderHandler(),
    '退款'=> new RevundHandler(),
];

$ handler = $ actions [$命令] ??拋出新的invalidCommandException();
$ handler-> execute($ data);

這避免了長(zhǎng)開關(guān)/如果路由命令時(shí)塊。


獎(jiǎng)勵(lì):使用match表達(dá)式(PHP 8)

PHP 8的matchswitch的更清潔替代品,通??梢蕴鎿QIf-Else鏈:

 $ status ='Active';

$ label = match($ status){
    'Active'=>'活動(dòng)用戶',
    '待定'=>'等待批準(zhǔn)',
    '無(wú)活動(dòng)'=>'無(wú)活動(dòng)',
    默認(rèn)=>'未知狀態(tài)'
};

它是基於表達(dá)式的,類型安全的,並且不需要break語(yǔ)句。


關(guān)鍵不是要完全消除條件 - 它們是必要的 - 而是將它們移出主要邏輯。使用早期的回報(bào),數(shù)據(jù)結(jié)構(gòu)和麵向?qū)ο蟮哪J絹肀3执a平坦,可讀和開放以進(jìn)行擴(kuò)展。

基本上:當(dāng)您看到深嵌套時(shí),問 -這可以是地圖,方法還是返回?通常,答案是肯定的。

以上是超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代品的詳細(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整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

從箭頭代碼到干淨(jìng)的代碼:簡(jiǎn)化嵌套IF的策略 從箭頭代碼到干淨(jìng)的代碼:簡(jiǎn)化嵌套IF的策略 Jul 30, 2025 am 05:40 AM

要消除嵌套if語(yǔ)句的複雜性,應(yīng)使用守衛(wèi)子句提前返回、合併條件表達(dá)式、用多態(tài)或策略模式替代分支、使用查找表映射值;1.使用守衛(wèi)子句提前處理邊界條件並退出;2.用邏輯操作符合併相關(guān)條件;3.用多態(tài)或策略模式替代複雜的類型分支;4.用字典等數(shù)據(jù)結(jié)構(gòu)替代簡(jiǎn)單的條件映射;最終使代碼扁平化、線性化,提升可讀性和可維護(hù)性。

隱藏成本:深度嵌套的PHP條件的性能影響 隱藏成本:深度嵌套的PHP條件的性能影響 Jul 30, 2025 am 05:37 AM

深層gonditionalsIncreasecoenditiveloadandDebuggingTime,makecodeHarderToundStandandAndain; recactoringWithEarllyReturnsandGuardClausessimplifiesFlow.2.poorScalobilityarityArisesaritiansarobilityAariissarobilityAarisabilitionArisArisabilitionArisArisAriaseAreSAmasmoreConmorecplicplicplicplicplicplicplicpplicplanchprediction,testinging,and testimizatio,and opoptimizatio

php Guard Guard子句:嵌套if語(yǔ)句的優(yōu)越替代品 php Guard Guard子句:嵌套if語(yǔ)句的優(yōu)越替代品 Jul 31, 2025 pm 12:45 PM

GuardClausesareAsueperaltaltaltaltAneStEdifStatementsInphpBeCausEtheDuceComplexityByByHandlingSearly.1)youmprovereadabilitybybyeleadibybyeliminatibalydeepnesting-deepnestingepnestingthemekingthemainlogiciCicicatThebaseAttheBaseAttheBaseAttheBaseIndentationLelevel.2)averguardclaudclauseexpliotlin

架構(gòu)控制流:何時(shí)使用(和避免)嵌套在PHP中 架構(gòu)控制流:何時(shí)使用(和避免)嵌套在PHP中 Jul 31, 2025 pm 12:42 PM

NestEdifStatementsareAcceptableInphpWhentheyReflectLogicalHarchies,SuchasGuardClauseswithClearlyExits,erarchicalBusinessLogic,orshallownesting(1-2級(jí)),beausetheyenenhancececlarityandmaintmaintlolityandMaintMaintFlow.2.2.2.2.deepePeepneSting(3級(jí)別),獨(dú)立於獨(dú)立於獨(dú)立,A a

嵌套為代碼氣味:識(shí)別和糾正過度複雜的邏輯 嵌套為代碼氣味:識(shí)別和糾正過度複雜的邏輯 Aug 01, 2025 am 07:46 AM

Deeplynestedifstatementsreducereadabilityandincreasecognitiveload,makingcodehardertodebugandtest.2.TheyoftenviolatetheSingleResponsibilityPrinciplebycombiningmultipleconcernsinonefunction.3.Guardclauseswithearlyreturnscanflattenlogicandimproveclarity

有效使用嵌套IF-ELSE結(jié)構(gòu)的錯(cuò)誤處理和驗(yàn)證 有效使用嵌套IF-ELSE結(jié)構(gòu)的錯(cuò)誤處理和驗(yàn)證 Jul 31, 2025 am 11:59 AM

Deeplynestedif-elseblocksreducecodereadabilityandmaintainability;2.Useearlyreturns(guardclauses)toflattenlogicandimproveclarity;3.Centralizevalidationwithresultobjectstoseparateconcernsandsimplifytesting;4.Applyvalidationpipelinesordecoratorsforreusa

調(diào)試地獄:導(dǎo)航和修復(fù)複合物,如果結(jié)構(gòu) 調(diào)試地獄:導(dǎo)航和修復(fù)複合物,如果結(jié)構(gòu) Aug 01, 2025 am 07:33 AM

useearlyReturnstoflattennestEdifStructuresandImpRoverAdibalybyHandlingEdgeCasesFirst.2.ExtractComplexConditionsIntodescriptiveBooleanVariaBliablestomAkeLogicSelf-Documenting.3.replacerole-ortplacerole-ortyplacerole-ortyple-ortyple-ortype baste conconditionalswithStratstratcypatternsorlookebebebebebebebebebebe.

馴服厄運(yùn)的金字塔:如果php中的語(yǔ)句,嵌套的重構(gòu) 馴服厄運(yùn)的金字塔:如果php中的語(yǔ)句,嵌套的重構(gòu) Aug 01, 2025 am 12:33 AM

要解決PHP中嵌套if語(yǔ)句導(dǎo)致的“死亡金字塔”問題,應(yīng)採(cǎi)用以下五種重構(gòu)方法:1.使用早期返回(guardclauses)將條件檢查扁平化,避免深層嵌套;2.將復(fù)雜條件提取為命名清晰的私有方法,提升可讀性和復(fù)用性;3.對(duì)複雜流程使用驗(yàn)證對(duì)像或中間件模式,實(shí)現(xiàn)可組合和可擴(kuò)展的校驗(yàn)邏輯;4.僅在簡(jiǎn)單場(chǎng)景下使用三元或空合併運(yùn)算符,避免嵌套三元表達(dá)式;5.用異常替代錯(cuò)誤字符串返回,集中處理錯(cuò)誤,保持核心邏輯純淨(jìng)。最終目標(biāo)是通過快速失敗、邏輯分離和合適的設(shè)計(jì)模式,使代碼更安全、易測(cè)試且易於維護(hù)。

See all articles