在PHP 7中,以下代码段奇怪地打印true
:
$b = true and false;
var_dump($b);
但是,如果我投了它,它会正确打印false
:
$b = (bool)(true and false);
var_dump($b);
导致这种情况发生的现象是什么?
答案 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)
&&
和||
的绑定比=
更紧密。