繁体   English   中英

if和elseif有什么区别?

[英]What's the difference between if and elseif?

这应该是一个简单的问题。 我有一个简单的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'),并且它有效。 我很想知道区别是什么。

谢谢! 阿米特

是。 如果满足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) {
}

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

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

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

在第一个块中,执行块中的每个比较。 此外,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'结尾。

<?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'可能是对还是错,因为它将覆盖先前的条件子句。

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

这并不仅仅是效率问题。 如果您正在切换某些内容,则必须使用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是必须与选项。

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

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

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

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

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

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

答案很简单:

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!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM