为什么我需要转换这个布尔表达式?

时间:2016-11-11 02:03:08

标签: php

在PHP 7中,以下代码段奇怪地打印true

$b = true and false;
var_dump($b);

但是,如果我投了它,它会正确打印false

$b = (bool)(true and false);
var_dump($b);

导致这种情况发生的现象是什么?

2 个答案:

答案 0 :(得分:7)

这不是演员正在做的,而是括号。 and的优先级低于=,因此您的第一个语句被视为

($b = true) and false;

你需要写:

$b = (true and false);

$b = true && false;
除了优先级之外,

&&and是等效的(||or也是如此)。

答案 1 :(得分:4)

这不是演员,而是括号:

$b = (true and false);
var_dump($b);
# => bool(false)

这是因为= binds more tightly than and or or

或者,这也有效:

$b = true && false;
var_dump($b);
# => bool(false)

&&||的绑定比=更紧密。

相关问题