为什么这个陈述中的$ x为真?
$x = true and false;
我遇到了一些变量的问题,但我可以将问题减少到原始的布尔值。
更新 正如您在回复中看到的那样,效果与PHP中的运算符优先级有关。还有一个good explanation about the problem in this question,我之前无法在网上找到,因为我不知道我有这方面的问题,我也不知道存在差异介于'&&' /' ||'和'和' /'或'。
答案 0 :(得分:3)
经过一些搜索,我发现这是由operator precedence in PHP.' ='运营商比'和'更强。
如果你想获得预期的结果,你必须使用大括号:
$x = (true and false); //correct: $x is false now!
没有大括号,表达式等于($x = true) and false;
。 $ x将获得真实的'值。之后,PHP解释器取代了'这个赋值是$ x刚刚得到的值。所以true and false;
仍然存在。这没有任何作用。 '假'失去了,并没有影响表达。
请注意,如果您使用&&&'并且不需要牙箍。或者' ||'!它们强于' ='因而强于和#39;和'或'。奇怪...
这与例如不同$x = 5 + 6;
因为这里' +'比'' ='更强它会先解决。最后它只影响布尔运算符'和','或'和' xor'。只有他们,你必须要小心。
另请注意,与JavaScript或Java等其他语言相比,这是不同的。在这些语言中,您不需要括号,因为逻辑运算符比等运算符强(Operators in JavaScript,Operators in Java)。
答案 1 :(得分:0)
更多相关内容:
$x = true and false;
所以我们有以下内容。如果您猜到$x
是真的,那么您是对的。由于=
的先例高于and
。
重写上面的表达式将等于:
($x = true) and false;
这里有趣的地方。
如果你这样做:
$x = true && false;
并且你猜测$x
是真的,你错了。在这种情况下,$x
实际上是假的。
上述表达式实际上等于:
$x = (true and false);
为什么呢?因为&&
的先例高于and
。