PHP if else - 正确使用“else”

时间:2012-01-29 00:38:01

标签: php javascript actionscript-3 coding-style syntax

很久以前,一位教授告诉我,当“链接”系列中的多个条件时,我会使用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如果是这样(或不是这样),我应该看什么什么时候使用?肯定会有一些东西让我的教授告诉我这件事。

8 个答案:

答案 0 :(得分:4)

使用else或不使用它意味着两件事。

如果您希望测试最多的一系列条件,则可以使用elseelse if。当一个条件的计算结果为true时,将执行块中的代码,然后退出整个if-else结构。

当多个条件可能属实时,使用else排除其他条件从评估变为true,因此在此使用else是错误的情况。

编辑:我现在看到你指的是每个子句包含一个return语句的特定情况。在这种情况下,最好使用elseelseif来明确if-else构造以第一种方式运行 - 即。最多可以执行一个条件。

答案 1 :(得分:2)

没有必要使用else,因为控制流会立即从函数返回return关键字。

此外,当发现不必要的回复时,我发现使用了else,因此在所有情况下都更喜欢替代2。

答案 2 :(得分: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;
}

这可能看似微不足道(并且在很大程度上提供的示例中),您可以看到其他人确实会产生影响。

在迫使一切都像他一样拥有其他东西时,他可能只是想提供一些风格的一致性(我认为这对新手来说是好的)。

当然,你是对的,在你提出的情况下,别的没有必要。无论它是坏还是好都只是一个意见问题。

答案 3 :(得分:1)

场景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..elseif..if不仅仅是语义或品味的问题,它还具有实际的功能差异。

如果if内的返回,它将完全退出该功能,因此这是 结果的特殊情况else-if相同。

答案 4 :(得分:0)

我认为这是一个很好的做法,因为如果你忘记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";
}
?>

答案 5 :(得分:0)

即可。为什么?因为这些条件基于相同的变量,只能满足一个。因此,如果您使用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;
    }
}

答案 6 :(得分:0)

这实际上取决于你的代码流程...... 有时你需要使用单独的if(s),有时你需要使用if(s)和else(s)...... 但是为了你添加的例子。就个人而言,我会选择您编写的第一个,因为它更有效,更易于阅读和理解。也许还有其他因素和要点,但这就是我看到它的原因,这也是我选择第一个因素的原因。

要添加的另一件事是,如果您使用第二个,编译器将始终执行第二个“if”,如果$ param包含不同于“1”或“2”的其他值。

答案 7 :(得分:0)

您可能想象我不久前在Apple网站上发现的这种情况

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

你明白了。我相信所有编译器都会将其分解为if / else代码,但我喜欢 灵活性控制break语句的位置。