无论在哪个语言,运算符都有优先级,就如四则运算一样。先乘除后加减,但语言的运算可不止四则。代码写的越多,越觉得运算符的优先级重要性(请原谅我是一个野生程序员)。记住运算符的优先级,能让你少些很多括号,也能体现你的水平,别闹笑话了(在有一个加法和一个乘法的式子中,还特地把乘法用括号括起来,这不是闹笑话吗)。更能够让那种无厘头的bug消失!
php官方给出的运算符优先级表(从上到下,优先级依次降低)
结合方向 | 运算符 | 附加信息 |
---|---|---|
无 | clone new | clone 和 new |
左 | [ | array() |
右 | ++ — ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 |
无 | instanceof | 类型 |
右 | ! | 逻辑运算符 |
左 | * / % | 算术运算符 |
左 | + – . | 算术运算符和字符串运算符 |
左 | << >> | 位运算符 |
无 | == != === !== <> | 比较运算符 |
左 | & | 位运算符和引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ? : | 三元运算符 |
右 | = += -= *= /= .= %= &= |= ^= <<= >>= => | 赋值运算符 |
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |
左 | , | 多处用到 |
在运算符优先级中,or和||,&和and都是逻辑运算符,效果一样,但是其优先级却不一样。
比如:
<?php $a = 3; $b = false; $c = $a or $b; echo $c; //这里的$c为int值3,而不是boolean值true ?
<?php $a = 3; $b = false; $c = $a || $b; echo $c; //这里的$c就是boolean值true了! ?>
一个更有特征的运算
或许上面的特征不是很明显,再来看看比较常用的短路运算
<?php $a = false || $a = 2; var_dump($a); // 这里输出的是true,原因是||优先级要高于= ?>
<?php $a = false or $a = 2; var_dump($a); //这里输出的是int值2 ?>
看上面的,短路运算如果想要少些括号,那么用or运算符吧!第一个短路运算,得加括号才行。
PS:php的布尔运算返回的值只会是boolean值,不像js,能够返回原值。怎么都感觉这是一个坑。
你可能还喜欢下面这些文章
赞赏微信赞赏
支付宝赞赏