繁体   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