PHP如果OR是第二部分检查是真的吗?

时间:2011-07-22 10:56:25

标签: php optimization conditional-statements short-circuiting

我知道这必须是一个简单的问题,但我知道在PHP中这样的语句

if ($a && $b) { do something }

如果$ a为假,PHP甚至不检查$ b

对于OR来说,同样如此

if ($a || $b) { do something }

如果$ a为真,它是否仍会检查$ b

我知道这是基本的东西,但我无法在任何地方找到答案......谢谢

5 个答案:

答案 0 :(得分:9)

  

一旦结果已知,就会停止对逻辑表达式的评估。

logical operators

答案 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()) {}
?>