注意到PHP中的奇怪逻辑。版本I使用的是PHP 5.6.18
。
代码示例:
$bet_exists = FALSE;
$unanswered_exists = TRUE;
$answer = $bet_exists OR $unanswered_exists;
if ($bet_exists OR $unanswered_exists)
$result = TRUE;
} else {
$result = FALSE;
}
var_dump($answer);
var_dump($result);
打印输出如下:
boolean false
boolean true
您是否了解此行为以及PHP决定这样做的原因是什么?
答案 0 :(得分:2)
or
和and
的优先级低于作业=
。
因此$answer = $bet_exists OR $unanswered_exists;
中的作业在<{em> or
之前处理,因此$unanswered_exists
的价值没有任何影响(在你的第三行)码)。它的执行方式类似于($answer = $bet_exists) OR $unanswered_exists;
。
改为使用||
和&&
。与$answer = $bet_exists && $unanswered_exists;
类似,产生预期结果。
答案 1 :(得分:2)
在分配之前使用括号,如$answer = ($bet_exists OR $unanswered_exists);
也适用于上述示例。
如果没有括号,代码将像分配一样,即
$answer = $best_exists;