PHP运算符优先级
问题:
1、常见的右结合运算符有哪些?
**、++、--、!、各种赋值符号,其他的基本都是左结合。
2、运算流程是什么样的?
- 编译器先按照运算符优先级寻找运算符,再按照结合方向寻找相关的操作数,完成运算。再按照优先级继续寻找下一个运算符。
- 如果运算符优先级相同,就从运算符的结合方向开始寻找运算符。
3、举例
三目运算符自身嵌套:
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
二目运算符自身嵌套:
"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. "="是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。
这里照应了上面提到的运算流程第2点。
同理,同级二目运算符嵌套:
$a = 1; $b = 2; $a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
单目运算符嵌套(注意):
$a = 1; echo $a + $a++; // may print either 2 or 3 $i = 1; $array[$i] = $i++; echo $i;// may set either index 1 or 2 dump($array); //我的PHP版本环境下打印结果是3 2 [2=>1]
官方提示(!):
运算符优先级和结合性只决定表达式是如何分组的,它们没有指定计算顺序。PHP并没有(在一般情况下)指定表达式的计算顺序,应该避免使用特定计算顺序的代码,因为PHP的不同版本之间或周围的代码可能会改变行为。
参考: