下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序
例1:||与=
$a=0; $b=0; if($a=3||$b=3){ $a++; $b++; } echo $a;//输出1 echo $b;//输出1
解释:
1,从上图可以看出逻辑运算符||的优先级高于赋值运算符=
2,在if条件判断时,实际是$a=(3||$b=3),括号里3为真,由于逻辑运算符||,只要前面的条件成立,后面不会进行运算,故而$b依旧等于0,不是3
3,$a=(3||$b=3),括号返回的是bool值,为true,由于递增递减不影响bool值。递减NULL也没有效果,但递增NULL的结果是1,故而$a++之后$a为1
4,由于$a=(3||$b=3)中$b=3赋值运算没有运行,故$b=0,$b++之后$b=1
5,$a为bool类型,var_dump($a),则是boolean true,echo $a,则是1
例2:逻辑运算符||和&&,or和and
$a=0; $b=0; if($a=3 or $b=3){ $a++; $b++; } echo $a;//输出4 echo $b;//输出1
解释:
1,从上图可以看到赋值运算符=的优先级高于逻辑运算符or
2,在if条件判断时,实际是($a=3) or $b=3,此时先进行赋值运算$a=3,由于($a=3)为真,由于逻辑运算符or,前面的条件成立,后面不会进行运算,故而$b依旧等于0,不是3
3,$a等于3,$a++之后$a=4,$b=0,$b++之后$b=1
例4:++ 与 --
$a=1; echo $a+++$a--;//输出3 echo $a;//输出1 $b=1; echo $b--+$b++;//输出1 echo $b;//输出1 $c=1; echo ++$c+$c++;//输出4 echo $c;//输出3
解释:
1,$a+++$a--,计算过程是先运行$a++,在运算时($a++)的值为1,$a++之后$a=2,然后运行$a--,此时$a=2,故($a--)的值为2,$a--运算之后$a=1,故运算结果是3,$a=1
2,$b--+$b++,计算过程先运行$b--,此时($b--)的值是1,$b--后$b=0,接着运行$b++,($b++)的值是0,$b++之后$b=1,故运算结果是1,$b=1
3,++$c+$c++,先运算(++$c),(++$c)的值为2,$c=2,接着运行($c++),此时$c=2,故而($c++)的值为2,运行完$c++之后$c=3,故而运算结果是3,$a=1
例5:$a++ 和++$a区别
1、++$a的用法
首先++$a等价于$a = $a + 1,比如$a初始值为1,那么$a = 1 + 1得出$a为2。
++$a执行过程:先将$a加1,假设结果为x,然后把x赋值给$a,所以$a的值等于x的值。
2、$a++的用法(以 x=a++ ,a=2 为例)
先将a值赋给变量 x(也就是 x=a ),然后 a 值加 1 (也就是 a = a + 1)
则最终x值等于2,a 值等于3,所以x = a++相当于 x = a , a = a + 1。
<?php $a = 1; $x = $a++; echo 'x='.$x.'<hr />'; echo 'a='.$a.'<hr />'; $b = ++$a; echo 'b='.$b.'<hr />'; echo $x+$b; ?>
结果:x = 1,a = 2,b = 3,4。
总结
x = ++a相当于a++,x = a。
x = a++相当于x=a,a++。
++a与a++ 单独使用时,相当于 a = a + 1。
如果赋给一个新变量,则++a先将a值加1 ,而a++先将a赋给新变量。