我知道这必须是一个简单的问题,但我知道在PHP中这样的语句
if ($a && $b) { do something }
如果$ a为假,PHP甚至不检查$ b
对于OR来说,同样如此
if ($a || $b) { do something }
如果$ a为真,它是否仍会检查$ b
我知道这是基本的东西,但我无法在任何地方找到答案......谢谢
答案 0 :(得分:9)
一旦结果已知,就会停止对逻辑表达式的评估。
答案 1 :(得分:8)
请参阅手册中Logical Operators页面上的示例1。
// --------------------
// foo() will never get called as those operators are short-circuit
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
答案 2 :(得分:1)
看看这个例子:
function foo1() {
echo "blub1\n";
return true;
}
function foo2() {
echo "blub2\n";
return false;
}
if (foo1() || foo2()) {
echo "end.";
}
$ b / foo2()未经过检查。 在这里演示:codepad.org
答案 3 :(得分:0)
如果至少有一个OR操作数为真,则无需进一步检查其他操作数,整个事情将评估为真。
如果至少有一个操作数为真,则(a || b || c || d || e || ...)将为TRUE,因此一旦我发现一个操作数为真,我就不需要检查以下操作数。
这种逻辑适用于所有地方,PHP,JAVA,C ......
答案 4 :(得分:0)
如果你相当了解你的真相表,那么你可以自己弄明白。正如其他人所说,PHP将进行评估,直到确定结果为止。在OR的情况下,只有一个必须为true才能使语句返回true。因此,PHP会进行评估,直到找到真值。如果找不到,则语句的计算结果为false。
<?php
if(true && willGetCalled()) {}
if(false && wontGetCalled()) {}
if(true || wontGetCalled()) {}
if(false || willGetCalled()) {}
?>