if和elseif有什么区别?

时间:2010-08-02 05:22:57

标签: php conditional if-statement

这应该是一个简单的问题。我有一个简单的if / else语句:

    <?php
    // TOP PICTURE DEFINITIONS
    if ( is_page('english') ) {
        $toppic = 'page1.png';
    }
    if ( is_page('aboutus') ) {
        $toppic = 'page1.png';
    }
    if ( is_page('newspaper') ) {
        $toppic = 'page1.png';
    }
    else {
        $toppic = 'page1.png';
    }
?>

与^^^有不同之处:

<?php
    // TOP PICTURE DEFINITIONS
    if ( is_page('english') ) {
        $toppic = 'page1.png';
    }
    elseif ( is_page('aboutus') ) {
        $toppic = 'page1.png';
    }
    elseif ( is_page('newspaper') ) {
        $toppic = 'page1.png';
    }
    else {
        $toppic = 'page1.png';
    }
?>

我应该提到这是进入Wordpress的。直到现在,我已经使用了第一部分(没有其他,只是一系列'ifs'),并且它有效。我很想知道区别是什么。

谢谢! 阿米特

8 个答案:

答案 0 :(得分:16)

是。如果满足if/else控制中的条件,则将省略其余检查。 else if只是if内的嵌套else

if ( is_page('english') ) { // if true, other statements are skipped
    $toppic = 'page1.png';
}
elseif ( is_page('aboutus') ) {
    $toppic = 'page1.png';
}
elseif ( is_page('newspaper') ) {
    $toppic = 'page1.png';
}
else {
    $toppic = 'page1.png';
}

但是在一系列if中,所有这些都将被测试。

if ( is_page('english') ) {
    $toppic = 'page1.png';
}
if ( is_page('aboutus') ) { // will be tested no matter what the outcome
                            // of the previous if statement was
    $toppic = 'page1.png';
}
if ( is_page('newspaper') ) { // the same here
    $toppic = 'page1.png';
}
else {
    $toppic = 'page1.png';
}

所以,如果你正在检查诸如数字奇偶校验之类的属性,它可能是奇数或偶数,为什么如果一个人满意,你还想打扰检查其他条件。这是浪费资源。因此,以下代码要好得多

if(number_is_odd) {
}
else { // if it's not odd, it's even for sure
}

大于

if(number_is_odd) {
}

if(!number_is_odd) {
}

因为前者检查条件一次,而后者检查两次。对于具有两种以上状态的条件,情况也是如此。

答案 1 :(得分:2)

第一种方法将检查每个条件,无论它们是真还是假。

第二种方法将检查每个条件,直到一个为真,然后忽略其余条件。

答案 2 :(得分:2)

在第一个块中,执行块中的每个比较。此外,toppic将始终分配给is_page('newspaper')中的值或is_page('newspaper')的else语句中的值。发生这种情况是因为始终评估最后的if语句。即使之前的if语句之一被评估为true,您也会在else块中结束。要测试这个,请尝试以下代码...

<?php
    // TOP PICTURE DEFINITIONS
    if ( is_page('english') ) {
        $toppic = 'english.png';
    }
    if ( is_page('aboutus') ) {
        $toppic = 'aboutus.png';
    }
    if ( is_page('newspaper') ) {
        $toppic = 'newspaper.png';
    }
    else {
        $toppic = 'finalelse.png';
    }
?>

你总是以'newspaper.png'或'finalelse.png'结尾。

答案 3 :(得分:2)

<?php
    if ( 3 > 1 ) {
        echo "This will be printed.";
    }
    if ( 3 > 2 ) {
        echo "This will be printed too.";
    }
    if ( 3 > 3 ) {
        echo "This will NOT be printed.";
    }
    else {
        echo "This WILL be printed.";
    }
?>

但是使用elseif:

<?php
    if ( 3 > 1 ) {
        echo "This will be printed.";
    }
    elseif ( 3 > 2 ) {   /* This condition will not be evaluated */
        echo "This will NOT be printed";
              // because it's on the ELSE part of the previous IF
    }   
    elseif ( 3 > 3 ) {   /* This condition will not be evaluated either */
        echo "This will NOT be printed.";
    }
    else {    /* This ELSE condition is still part of the first IF clause */
        echo "This will NOT be printed.";
    }
?>

所以你应该使用ELSEIF,因为否则$ toppic将总是导致'newspaper.png',它应该是正确的,或'finalelse.png'可能是对还是错,因为它会覆盖以前的条件子句

我希望你会发现这很有帮助。

答案 4 :(得分:2)

这并不仅仅是效率问题。如果您要切换某些内容,则必须使用else if而不仅仅是if

假设我们正在切换变量$computerOn

if ($computerOn == true) {
    $computerOn = false;
}
if ($computerOn == false) {
    $computerOn = true;
}

在上述情况下,$computerOn 始终true。如果是true,则设置为false。在此之后,我们检查它是否为false,它现在必须独立于初始条件,因此它现在设置为true

另一方面,下面的代码将切换$ computerOn:

if ($computerOn == true) {
    $computerOn = false;
} elseif ($computerOn == false) {
    $computerOn = true;
}

现在我们检查$computerOn是否为false,如果它最初不是true。因此,我们有一个切换。

如果事情变得更复杂,您可能必须使用多个elseif。重要的是要认识到逻辑何时指示elseif是必须与选项。

答案 5 :(得分:1)

两者之间最大的区别是,只要else返回false,就会调用最后一个is_page('newspaper')块。在这种情况下,它几乎意味着每次脚本运行。在这种情况下,这并不是什么大不了的事,因为你只设置一个变量,它与其他所有变量都是一样的。但是,如果它不同,你会有一个非常令人沮丧的错误追踪!

除此之外,如果您使用单独的if语句,则每次都会评估每个if的条件。同样,在这种情况下,它(可能)并不是什么大不了的事。但是,如果条件是,说...

if(delete_file('foo.png')) {
    ....
}

if(delete_file('bar.png')) {
    ....
}

if(delete_file('baz.png')) {
    ....
}
else {
    ....
}

嗯,你应该能够看到它的发展方向;)如果你使用elseif,一旦它变为真,它将停止尝试评估。并且,只有在没有其他条件成立的情况下才会调用else。

答案 6 :(得分:1)

答案很简单:

if(a==1){
  b
}
elsif(b==1){
  c
}

等于

if(a==1){
  b
}
else{
  if(b==1){
    c
  }
}

这与

相同
if(a==1){
  b
}
if(b==1){
  c
}

如果a == 1且b == 1同时不可能。虽然两个if语句都可以为true,但是当b和c可以执行时。如果你在那里使用elsif,这是不可能的,因为只有在!= 1时才会检查b == 1!

答案 7 :(得分:0)

明智地使用else可以节省大量时间,因为解析器不需要评估所有条件。