当前位置: 首页 > 后端技术 > PHP

PHP的加减法你可能不知道

时间:2023-03-30 05:57:40 PHP

这可能算不上正式的解释,毕竟有点费脑。原因是这样的,我们都知道php语法中有一个自增操作,也就是++,那我就列一个表达式$a=1;$结果=$a+$a++;//$result===3好的,为什么它等于3?只有一个解释,就是自增的优先级高于加减的优先级,所以第二个位置的自增导致第一个位置变成2。(3=2+1)由于第一个位置变成2,为什么第二个位置不变成2?因为后自增的返回值只是一个临时变量,这点和C/C++是一致的。毕竟PHP也是基于C实现的,另一种写法$a=1;$结果=$a+++$a;//$result===4似乎验证了刚才的解释。由于是预增,所以第二位本身的值就变成了2。(4=2+2)Deterioration接下来,我们将数量增加到3$a=1;$结果=$a+++$a+++$a;//$result===7为什么是7?按照思路,应该是9=3+3+3。他也是喝醉了,按照常理没有出牌。增加到4$a=1;$结果=$a+++$a+++$a+++$a;//$result===11answerisnot16=4+4+4+4.嗯,和我想的不一样。猜想既然加2$a可以正确计算,但是一开始就3错误,为什么呢?于是就有了猜测,PHP加上$a=1;$结果=(($a+++$a)+++$a)+++$a;//$result===11优先级顺序()>++>+,11=((2+2)+3)+4,$a每跳出一层就加1。带括号和不带括号,运算的最终结果都是11。对于看不见括号的事实,我有点信服。看不见的括号所以我只让最后的$a自增$a=1;$result_a=$a+$a+$a+++$a;//$result_a===5$a=1;$result_b=(($a+$a)+$a)+++$a;//$result_b===5好的,$result_a和$result_b具有相同的值。5=((1+1)+1)+2这个时候我们加上后自增,看看结果会不会一样$a=1;$result_a=$a+$a+$a+++++$A;//$result_a===6$a=1;$result_b=(($a+$a)+$a++)+++$a;//$result_b===6是的,后面是隐式括号,6=((1+1)+1)+3奇怪的1为了对看不见的括号做最后的定论,我们再看一个烧脑的例子$一=1;$result_a=$a+++$a+++$a;//$result_a===7$a=1;$result_b=1+$a+++$a+++$a;//$result_b===7不不不,你没看错,$result_b前面真的多了一个1。但是,它们的值都是7。你知道为什么吗?