cnDenis http://cndenis.github.io 2013-10-30

PHP中的运算符优先级, 比较运算符高于位运算符, 赋值运算符高于部分逻辑运算符, 真是坑啊.

比较运算符高于位运算符, 所以

$A == $B & $C 等价于 ($A == $B) & $C不是先做&再进行比较

赋值运算 and or xor 高于逻辑运算, 但却低于 &&||, 所以

<?php
    $a = true and false;
    var_dump($a);    // 输出是 bool(true)

    $b = true and false;
    var_dump($b);    // 输出是 bool(false)

上面那行居然是 先把 true 赋给 $a, 然后再与后面的false做逻辑与.

&&and 居然还不等价, 雷死人了.

以后还是要习惯多加括号了.

完整的优先级列表可以参考 官方手册.

刚发现还有另外的坑, 这个优先级是有例外的: PHP运算符优先级的一个例外.



blog comments powered by Disqus
头像

cnDenis

Email: 联系我

Fork me on GitHub