php运算符的优先级

无论在哪个语言,运算符都有优先级,就如四则运算一样。先乘除后加减,但语言的运算可不止四则。代码写的越多,越觉得运算符的优先级重要性(请原谅我是一个野生程序员)。记住运算符的优先级,能让你少些很多括号,也能体现你的水平,别闹笑话了(在有一个加法和一个乘法的式子中,还特地把乘法用括号括起来,这不是闹笑话吗)。更能够让那种无厘头的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,能够返回原值。怎么都感觉这是一个坑。

 

赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注