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

目錄
2.策略模式:用課程代替條件
3。查找表和簡單映射的陣列
4.多態(tài)性:讓對象決定其行為
5。復(fù)雜工作流的狀態(tài)或命令模式
獎勵:使用match表達(dá)式(PHP 8)
首頁 后端開發(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ù)組替換簡單的映射; 4.采用多態(tài)性,以便對象決定其行為; 5。利用狀態(tài)或命令模式進(jìn)行復(fù)雜的工作流程;此外,將PHP 8匹配表達(dá)式用于清潔有條件的邏輯 - 這些技術(shù)統(tǒng)稱代碼,提高可讀性并通過將條件從主要邏輯移出來提高可維護(hù)性。

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

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

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

1。后衛(wèi)條款:盡早退出,減少筑巢

最簡單但最有效的技術(shù)之一是使用Guard Crauses - 在功能開始時處理邊緣案例或無效狀態(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)行選擇時,策略模式用類或可召喚的地圖代替了長時間的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)行專門的類,以實現(xiàn)TaxStrategy界面,以更好地分離和可檢驗性。


3。查找表和簡單映射的陣列

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

而不是:

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

使用查找:

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

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

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


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

如果您的條件取決于對象類型,請使用多態(tài)性。在基類或接口中定義方法,并讓子類實現(xiàn)自己的版本。

例子:

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

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

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

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

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


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

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

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

或者,使用命令圖

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

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

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


獎勵:使用match表達(dá)式(PHP 8)

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

 $ status ='Active';

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

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


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

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

以上是超越嵌套:PHP中深層IF-ELSE結(jié)構(gòu)的替代方案的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

從箭頭代碼到干凈的代碼:簡化嵌套IF的策略 從箭頭代碼到干凈的代碼:簡化嵌套IF的策略 Jul 30, 2025 am 05:40 AM

要消除嵌套if語句的復(fù)雜性,應(yīng)使用守衛(wèi)子句提前返回、合并條件表達(dá)式、用多態(tài)或策略模式替代分支、使用查找表映射值;1.使用守衛(wèi)子句提前處理邊界條件并退出;2.用邏輯操作符合并相關(guān)條件;3.用多態(tài)或策略模式替代復(fù)雜的類型分支;4.用字典等數(shù)據(jù)結(jié)構(gòu)替代簡單的條件映射;最終使代碼扁平化、線性化,提升可讀性和可維護(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ōu)越替代品 php Guard Guard子句:嵌套if語句的優(yōu)越替代品 Jul 31, 2025 pm 12:45 PM

GuardClausesareAsueperaltaltaltaltAneStEdifStatementsInphpBeCausEtheDuceComplexityByByHandlingSearly.1)youmprovereadabilitybybyeleadibybyeliminatibalydeepnesting-deepnestingepnestingthemekingthemainlogiciCicicatThebaseAttheBaseAttheBaseAttheBaseIndentationLelevel.2)averguardclaudclauseexpliotlin

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

NestEdifStatementsareAcceptableInphpWhentheyReflectLogicalHarchies,SuchasGuardClauseswithClearlyExits,erarchicalBusinessLogic,orshallownesting(1-2級),beausetheyenenhancececlarityandmaintmaintlolityandMaintMaintFlow.2.2.2.2.deepePeepneSting(3級別),獨立于獨立于獨立,A a

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

Deeplynestedifstatementsreducereadabilityandincreasecognitiveload,makingcodehardertodebugandtest.2.TheyoftenviolatetheSingleResponsibilityPrinciplebycombiningmultipleconcernsinonefunction.3.Guardclauseswithearlyreturnscanflattenlogicandimproveclarity

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

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

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

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

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

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

See all articles