下面的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
}
}
什么会更有效?
答案 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条件下检查两个条件,也没有必要。所以你的第一个条件会快速执行。