分配PHP中的布尔表达式:奇怪的行为[副本](Assignment in PHP with bool

2019-09-25 15:41发布

这个问题已经在这里有一个答案:

  • 'AND' VS '&&'作为运营商 11个回答

为什么是$ X在这种statment真的吗?

$x = true and false;

我有这个问题的一些变量,但我可以在问题减少到原始的布尔值。

更新:正如您在答复看到效果与PHP中的操作precedense做。 还有一个关于这个问题,这个问题很好解释 ,这是我能在网前,因为我不知道我有这样一个问题,我不知道有“之间的差别没有找到&& '/' ||” 和“和” /“或”。

Answer 1:

一些搜索后,我发现,这是由引起的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中 )。



Answer 2:

更多内容:

$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 [duplicate]