4

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

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

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

那么 OR 所以同样的事情

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

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

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

4

5 回答 5

9

一旦知道结果,就停止对逻辑表达式的求值。

逻辑运算符

于 2011-07-22T10:58:44.493 回答
8

请参阅手册中逻辑运算符页面上的示例 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());
于 2011-07-22T10:59:08.583 回答
1

看这个例子:

function foo1() {
  echo "blub1\n";
  return true;
}

function foo2() {
  echo "blub2\n";
  return false;
}

if (foo1() || foo2()) {
  echo "end.";
}

$b / foo2() 未检查。在这里演示:codepad.org

于 2011-07-22T11:04:20.327 回答
0

如果至少一个 OR 操作数为真,则无需进一步检查其他操作数,整个事情将评估为真。

(a || b || c || d || e ||...) 如果至少有一个操作数为真,则为真,因此一旦我发现一个操作数为真,我不需要检查以下内容操作数。

这个逻辑适用于任何地方,PHP、JAVA、C...

于 2011-07-22T11:22:09.613 回答
0

如果您非常了解您的真值表,那么您可能可以自己弄清楚。正如其他人所说,PHP 将评估直到确定结果为止。在 OR 的情况下,只有一个为真,语句才能返回真。所以 PHP 会一直计算,直到找到一个真值。如果找不到,则该语句评估为假。

<?php
if(true && willGetCalled()) {}
if(false && wontGetCalled()) {}
if(true || wontGetCalled()) {}
if(false || willGetCalled()) {}
?>
于 2011-07-22T13:46:11.083 回答