这个问题已经在这里有一个答案:
- 'AND' VS '&&'作为运营商 11个回答
为什么是$ X在这种statment真的吗?
$x = true and false;
我有这个问题的一些变量,但我可以在问题减少到原始的布尔值。
更新:正如您在答复看到效果与PHP中的操作precedense做。 还有一个关于这个问题,这个问题很好解释 ,这是我能在网前,因为我不知道我有这样一个问题,我不知道有“之间的差别没有找到&& '/' ||” 和“和” /“或”。
这个问题已经在这里有一个答案:
为什么是$ X在这种statment真的吗?
$x = true and false;
我有这个问题的一些变量,但我可以在问题减少到原始的布尔值。
更新:正如您在答复看到效果与PHP中的操作precedense做。 还有一个关于这个问题,这个问题很好解释 ,这是我能在网前,因为我不知道我有这样一个问题,我不知道有“之间的差别没有找到&& '/' ||” 和“和” /“或”。
一些搜索后,我发现,这是由引起的PHP运算符优先级。 在“=”运算符是比“和”强。
如果你想获得期望的结果,你必须使用括号:
$x = (true and false); //correct: $x is false now!
没有括号的表达式等于($x = true) and false;
。 $ x将得到“真”值。 该PHP解释后“取代”这个作业与$ X刚拿到的价值。 所以true and false;
遗迹。 而这并不做任何事情。 “假”丢失,不影响表达。
请注意,如果你用“&&”或“||”括号不需要! 它们比“=”更强,因此比更强的“和”和“或”。 奇怪...
这是为了例如不同$x = 5 + 6;
因为在这里“+”是不是“=”,它会首先解决更强。 最后,它仅影响布尔运算符“与”,“或”和“异”。 只有他们,你必须小心。
还需要注意的是相比于如JavaScript或Java语言编写的,这是不同的。 在这些语言,你不需要括号,因为逻辑运算符比等于运算符(强运营商中的JavaScript , 运营商在Java中 )。
更多内容:
$x = true and false;
因此,我们有以下几点。 如果您猜到$x
是真实的,你是对的。 由于=
具有比较高的先例and
。
重写它上面的表达式将等于这样的:
($x = true) and false;
在此处,它变得有趣。
如果你这样做:
$x = true && false;
而且你猜$x
是真的,你就错了。 $x
是在这种情况下,实际上是错误的。
上述表达式实际上等于:
$x = (true and false);
为什么? 由于&&
比更高的先例and
。