php关于a++和++a的问题

$a=10;
$b=$a+ ++$a + ++$a ;

echo $b;

为什么$b的输出结果是34= =

csdn竟然不支持markdown语法,只好上图图片说明

$b = ($a++) + ($a++) + ($a) = 10 + 11 + 12, 老哥害我去试一遍,没学过php,但感觉你装了假的
图片说明

$a+ (++$a) + (++$a) ; 34没毛病

graph TD

    +1 -->|第二步计算a+a=11+11=22记为sum|+2a=11
    +1 -->++2a=12
    +2a=11 --> a2=11
    +2a=11 --> ++1a=11
    ++1a=11 -->|第一步先计算++a此时a=11|a1=10
    ++2a=12 --> |第三步计算++a,a-12|a3=11
    最后计算sum+a=22+12=34输出34

先计算叶,后计算根,因此其中 a1->a3都是变量a,编译器有区别,变量一般先存储变量名,然后计算时才会执行mov a,[xx]赋值,当然有的编译器就会直接会把a1 a2 赋值为10,再计算,可能就是33甚至是a3=10,得到结构是32也是有可能的,但大多数是34

因为++自增自减运算符优先级比较高,先计算++$a,此时,$a=11,所以$a+(++$a)应该变成 11+11=22,然后计算22+(++$a),这里++$a=12,
所以最后计算22+12,结果是34

补充一句,算数运算符是左联的,所以 例如:1+2+3其实是(1+2)+3;而像等号是右联的,所以$a = $b = $c其实相当于$a = ($b = $c)

$a=10;
echo $a+ ++$a; //22