首先,$a++ 和 ++$a,对于 $a 而言,结果都是 $a 自增。
// 例子1
$a = 5;
$a++; // $a = 6
++$a; // $a = 7
++(自增)运算符参与表达式运算时,自增运算符在变量位置的前或后,会对表达式的运算结果产生影响,注意,针对的是表达式,对于参与运算的变量,还是应该按照例子1来理解。
// 例子2
$a = 5;
// 参与表达式运算时
// $a++ 先取 $a 的值,再将 $a 加 1
// ++$a 先将 $a 加 1,再取 $a 的值
$b = $a++; // $b = 5, $a = 6
$c = ++$a; // $a = 7,$c = 7
// 最终:$a = 7,$b = 5,$c = 7
最后,针对你给的例子分析下:
// 例子3
$a = 5;
$b = $a++ + ++$a;
// ($a++) + (++$a) 根据运算符优先级
// (5) + (++$a) 第一个括号里,先取 $a 的值,即 5,然后 $a 加 1,即 $a = 6
// (5) + (7) 第二个括号里,先将 $a 的值加 1,然后再取 $a 的值,即 7
// 最后,将运算结果赋值给 $b,即 $b = 12
// 例子4
$a = 5;
$b = 2;
$c = $a++ + ++$b;
// ($a++) + (++$b);
// (5) + (3) (取 $a 的值) + (取 $b 加 1 后的值)
// 8
// 最后 $a = 6,$b = 3,$c = 8
// 自增运算符前后位置,影响的是表达式的运算,而不是变量自己($a 和 $b)
// 对于 $a 和 $b 而言,结果显而易见,都是自己加 1,
// 对于 $c 而言,它是表达式运算的结果,所以受 自增(++)运算符的影响,从而导致结果也不一样。
转自百度知道