怪异的php OR语句逻辑

时间:2016-07-18 11:10:52

标签: php

注意到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决定这样做的原因是什么?

2 个答案:

答案 0 :(得分:2)

orand的优先级低于作业=

因此$answer = $bet_exists OR $unanswered_exists;中的作业在<{em> or之前处理,因此$unanswered_exists的价值没有任何影响(在你的第三行)码)。它的执行方式类似于($answer = $bet_exists) OR $unanswered_exists;

改为使用||&&。与$answer = $bet_exists && $unanswered_exists;类似,产生预期结果。

看看operator precedences in PHP

答案 1 :(得分:2)

在分配之前使用括号,如$answer = ($bet_exists OR $unanswered_exists);也适用于上述示例。

如果没有括号,代码将像分配一样,即

$answer = $best_exists;