簡體   English   中英

PHP if else - 正確使用“else”

[英]PHP if else - proper use of “else”

很久以前,一位教授告訴我,在一系列“鏈接”多個條件時我會使用else (我還在學習)。 既然我幾年后一直在修改幾個框架和CMS,我發現我教的內容並不一定如此,這很有趣。

我被教導在一系列條件之間使用else

function double(param){
    if(param==1){
        return param+=1;
    }
    else 
    if(param==2){
        return param+=2;
    }
    else{
        return false;
    }
}

如今,我似乎看到了這一點,我很久以前就被警告不要這樣做:

function double(param){
    if(param==1){
        return param+=1;
    }
    if(param==2){
        return param+=2;
    }
    return false;
}

這個示例代碼可能不起作用,但想法是: 是否有必要在每個條件之間使用else 如果是這樣(或不是這樣),在使用任何一種方式時我應該注意什么? 一定有什么東西導致我的教授告訴我這樣的事情。

使用else或不使用它的意思是兩個不同的東西。

如果您希望測試一系列條件,其中最多可能是一個,則使用else或者else if 當一個條件的計算結果為true時,將執行塊中的代碼,然后退出整個if-else結構。

當多個條件可能為真時,使用else阻止其他條件評估為true,因此在這種情況下使用else是錯誤的。

編輯:我現在看到你指的是每個子句包含一個return語句的特定情況。 在這種情況下,最好使用elseelseif來明確if-else構造以第一種方式運行 - 即。 最多可以執行一個條件。

沒有必要使用else,因為控制流立即在return關鍵字點返回函數。

此外,當發現不必要的回報時,我發現使用了else,因此在所有情況下都更喜歡替代2。

這真的只是一個意見問題。

在這樣的情況下沒有必要使用else ,但是你的教授可能已經描述了一個不同的情況,或者他只是讓你為了強調/強制清晰而做。

首先,我認為從同一個函數返回不同的數據類型通常是糟糕的風格,但話說回來,舉個例子:

function double($param) {
    if ($param == 1) {
        return $param + 1;
    } else if ($param == 2) {
        return $param + 1;
    } else {
        return false;
    }
}

現在想象一個類似的例子,除了每次都不返回:

function double($param) {
    $returnMe = 0;

    if ($param == 1) {
        $returnMe = $param + 1
    } else if ($param == 2) {
        $returnMe = $param + 2;
    } else {
        $returnMe = false;
    }

    return $returnMe;
}

這似乎微不足道(並在提供它在很大程度上就是例子),你可以看到其他人確實有所作為。

在強迫一切都像他一樣有其他東西時,他可能只是想提供一些風格的一致性(我認為這對新手來說是好的)。

當然,你是對的,在你提出的情況下,別的是不必要的。 無論是壞還是壞都只是一個意見問題。

場景1

if ($one) {
    doA();
}
if ($two) { // ALWAYS check this block - it is not attached to anything
    doB();
}

Truth table:

            | $one True | $one False 
------------+-----------+------------
$two True   | A and B   | B only   
$two False  | A only    | none

情景2

if ($one) {
    doA();
}
else if ($two) {  // ONLY check this block if $one is false!
    doB();
}

Truth table:

            | $one True | $one False 
------------+-----------+------------
$two True   | A only    | B only   
$two False  | A only    | none

正如您在真值表中看到的那樣,這兩種情況並不相同。 因此,無論是使用if..else還是if..if不僅僅是語義或品味問題,它還具有實際的功能差異。

if內部返回的情況下,它將完全退出函數,因此它是一個特殊情況,其結果else-if相同。

我認為這是一個很好的做法,因為如果你忘記了return條款(導致難以發現的錯誤),流程將會跟進

無論如何,else子句在某些情況下可能過於冗長,所以你可以使用elseif

<?php
if ($a > $b) {
    return "a is bigger than b";
} elseif ($a == $b) {
    return "a is equal to b";
} else {
    return "a is smaller than b";
}
?>

是的 為什么? 因為這些條件基於相同的變量,只能滿足一個。 因此,如果您使用elseif (PHP)或else if (JavaScript),您將提高代碼可見性並可能避免將來出現一些錯誤。

你的PHP代碼

PHP中的代碼如下所示:

function double($param){
    if($param==1){
        return $param+=1;
    }
    elseif($param==2){
        return $param+=2;
    }
    else{
        return false;
    }
}

或者,使用switch對應方:

function double($param){
    switch ($param) {
        case 1:
            return $param+=1;
        case 2:
            return $param+=2;
        default:
            return false;
    }
}

您在JavaScript中的代碼

在JavaScript中它看起來像這樣:

function double($param){
    if($param==1){
        return $param+=1;
    }
    else if($param==2){
        return $param+=2;
    }
    else{
        return false;
    }
}

它實際上取決於代碼的流程...有時您需要使用單獨的if(s),有時您需要使用if(s)和else(s)...但是為了您添加的示例。 就個人而言,我會選擇您編寫的第一個,因為它更有效,更易於閱讀和理解。 也許還有其他因素和要點,但這就是我看到它的原因,這也是我選擇第一個因素的原因。

還有一件事要添加..如果使用第二個,編譯器將始終執行第二個“if”,如果$ param包含除“1”或“2”之外的其他值。

您可能想象我不久前在Apple的網站上發現的這種情況

switch(true) {
    case foo == bar:
        break;
    case foo > 5:
        break;
    case foo > 10:
    case bar > 5:
        break;
}

你明白了。 我相信所有編譯器都會將其分解為if / else代碼,但我喜歡控制break語句的靈活性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM