哪个if语句更有效?

时间:2015-01-20 13:32:31

标签: php if-statement

下面的if语句在PHP中效率更高:

$A=@"llaweikj";
$B=@"aesrwh";
$C=@"uymy";
$D=@"xcvb";

if ( ($A==$B) && ($C==$D) ) {
    //Do something with it
}

OR

if ($A==$B) {
    if ($C==$D) {
       //Do something with it
    }
}

什么会更有效?

2 个答案:

答案 0 :(得分:1)

这两个例子(现在)在逻辑上是等价的,并且因为Php does short circuit boolean evaluation,在你的第一个例子中,第二个条件C==D只有在第一个A == B为真时才会被评估,这相当于显式嵌套的第二个例子。

现在更有效的选择取决于你可能想要对这两个条件做什么else。在全有或全无的情况下,第一次检查是正常的:

if ( ($A==$B) && ($C==$D) ) {
    // Both are true
}
else {
    // Here we only know that at least one condition failed 
    // we would need to recheck if additional logic was required
}

而嵌套if允许更有效地检测这两种条件的所有不同排列,而在需要更细粒度逻辑的情况下:

if ($A==$B) {
    if ($C==$D) {
     // $A == $B and $C == $D
   }
   else {
     // $A == $B but $C != $D
   }
}
else {
    // $A != $B 
    // ... we may again need to check $C vs $D
}

答案 1 :(得分:0)

在你的问题中,两种陈述都不同。

在第一个声明中:

if ( ($A==$B) && ($C==$D) )

首先它将检查A是否等于B而C等于D,然后代码将在if语句中执行。意味着这两个条件都必须成立。

但在你的第二个声明中:

if ($A==$B) 
if ($C==$D)

如果A等于B则执行真实条件内的代码,如果条件将执行则首先执行,如果C等于D则执行第二个语句。如果两者都为真,则两者都将执行条件。

<强>编辑:

更新问题后,答案就在这里:

您的第一个条件if ( ($A==$B) && ($C==$D) )效率更高。 在第二个陈述中,即使您可以在单个if条件下检查两个条件,也没有必要。所以你的第一个条件会快速执行。