21,882
社区成员
发帖
与我相关
我的任务
分享
$a = 1;
$c = $a + ($a++);
var_dump($c);//3
$a = 1;
$c = (++$a)+$a;
var_dump($c);//4
$a = 1;
$c = (++$a)+($a++);
var_dump($c);//4
$a = 1;
$b = &$a;
$c = (++$a)+($a++);
var_dump($c);//5
$c = $a + ($a++); 是以变量参与运算的 xu大我还是不太理解和1式的区别 如果按照3式的分析,得到结果是2,当然这肯定是不对的 1式和3式的核心区别在哪里呢?....
对于 $a = 1; $b = &$a; var_dump($c);//5 由于应用的存在,情况要复杂点 由于有一个对 $b 的赋值过程,这相当于 $a = 1; $c = (++$a)+($b = $a+1); var_dump($c);//5
又无括号多没有关系,你这都是加法运算,由加法的结合律可知,无论是否有括号,括号加在哪里,都不会影响最终的结果$a = 1; $c = (++$a)+($a++); var_dump($c);//4 $a = 1; $c = ++$a + $a++; var_dump($c);//4 $a = 1; $c = $a++ + ++$a; var_dump($c);//4
$a = 1;
$c = (++$a)+($a++);
var_dump($c);//4
$a = 1;
$c = ++$a + $a++;
var_dump($c);//4
$a = 1;
$c = $a++ + ++$a;
var_dump($c);//4
1)表达式从左到右执行,所以$a这时还是1,1+2=3 2)同样是从左到右执行,++$a为2,这时$a已经自加过,所以2+2=4 3)++$a是先自加,这时$a值为2,后面的$a++是后自加,所以2+2=4 4)因为是改变引用的值,所以是2+3=5
对于 $a = 1; $c = (++$a)+($a++); var_dump($c, $a);//4, 3 是这么理解的 (++$a) 先加 1,后取值 取出 $a 的值(2)参与运算 ($a++) 先取值,后加 1 取出 $a 的值(2)参与运算 $c = (2) + (2) 虽然此时 $a 已经是 3 了 但参与计算的都是标量,没有变量 注意与 1 式的区别
xu大我还是不太理解和1式的区别 如果按照3式的分析,得到结果是2,当然这肯定是不对的 1式和3式的核心区别在哪里呢?....