用bool表达式在PHP中分配:奇怪的行为
这个问题在这里已经有了答案:
经过一番搜索后,我发现这是由PHP中的运算符优先级引起的。 '='运算符比'和'更强。
如果你想得到预期的结果,你必须使用大括号:
$x = (true and false); //correct: $x is false now!
没有大括号的表达式等于($x = true) and false;
。 $ x将获得'真正'的价值。 之后,PHP解释器用$ x刚刚获得的值“替换”此赋值。 如此true and false;
遗迹。 而这没有任何作用。 '假'丢失,并没有影响表达。
请注意,如果使用'&&'或'||',则不需要大括号! 它们比“=”更强,因此比“和”和“或”更强。 奇怪...
这与例如$x = 5 + 6;
因为这里的'+'比'='强,它会先解决。 最后,它只影响布尔运算符'和','或'和'xor'。 只有与他们在一起,你必须小心。
还要注意,与JavaScript或Java等其他语言相比,这是不同的。 在这些语言中,不需要大括号,因为逻辑运算符比等号运算符(JavaScript中的运算符,Java中的运算符)更强大。
更多关于这个:
$x = true and false;
所以我们有以下几点。 如果你猜测$x
是真的,你会是对的。 由于=
具有比较高的先例and
。
重写上面的表达式将等于:
($x = true) and false;
这是它变得有趣的地方。
如果你这样做:
$x = true && false;
你会猜测$x
是真的,你会错的。 在这种情况下$x
实际上是错误的。
上述表达式实际上等于:
$x = (true and false);
为什么? 由于&&
比更高的先例and
。
上一篇: Assignment in PHP with bool expression: strange behaviour