用bool表达式在PHP中分配:奇怪的行为

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

  • 'AND'和'&&'作为操作符10的答案

  • 经过一番搜索后,我发现这是由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

    链接地址: http://www.djcxy.com/p/57617.html

    上一篇: Assignment in PHP with bool expression: strange behaviour

    下一篇: dump(true and false) as boolean(true)?