爬坑:彻底搞懂php自加自减运算
2018-06-14 本文已影响0人
老衲灬
核心运算原则:
1、整个运算式按照正常运算法则运算,例如简单的从左往右运算,只要前两项不包含自加自减运算,就先算出结果,再按照运算顺序往后算。
2、前自加后自加本项表达式的运算处理,假设 $i=10
:
<1> 运算中遇到 ++$i
就先处理完本项,把整个运算式中所有未运算的自加自减的变量 $i
和非自加自减的变量 $i
的值先加1,当然本项++$i
结果为11再去与其它项的运算;
【特别注意:如果第一项就为自加自减,则第二项的自加自减不再影响第一项中 $i
的值,因为第一项的自加自减表达式处理完后,相当于已经运算得到了本项的结果】
<2> 运算中遇到 $i++
同样先处理完本项,把运算式中除本项外所有未运算的自加自减的变量 $i
和非自加自减的变量 $i
的值都先加1,而本项 $i++
结果取值10再去与其它项的运算。
【加深理解后自加:后自加,就是 $i++
本项在处理时先取值10,确定本项用10去参与运算,并不先加1,但是本项 $i++
处理完后, $i
才会加1,即下次使用 $i
值为11,所以处理完本项,当再运算其它运算项中的 $i
时,其实就是再次使用】
示例详解:
$i = 10;
echo $i + $i++;
// 分析:
// 第一项$i非自加自减的变量,先不管,需要确定第二项才能进行运算
// 第二项为后自加,所以本项参与运算的数值为10,然后处理本项的后自加,则第一项改变为11
// 即:11 + 10 = 21 结果为21
$i = 10;
echo $i + ++$i;
// 分析:
// 第一项 $i 非自加自减的变量,先不管,需要确定第二项才能进行运算
// 第二项为前自加,所以所有的 $i 全部加1,则本项参与运算的数值为11,第一项值变为11
// 即:11 + 11 = 22 结果为22
$i = 5;
echo $i + $i++ + ++$i;
// 分析:
// 第一项$i非自加自减的变量,先不管,需要确定第二项才能进行运算
// 第二项后自加,按照之前的算法
// 此时运算式变为: 6 + 5 + ++6
// 此时前两项可以运算出结果即为: 11 + ++6
// 则最终结果为11 + 7 = 18
特殊语法示例:
$i = 10;
echo $i+++$i;
// 中间三个连加的情况
// 会解析为: $i++ +$i
// 结果为: 21
$i = 10;
echo $i+++$i+++$i;
// 解析为 $i++ +$i++ +$i
// 结果为 33
$i = 10;
echo $i+++++$i; // 语法报错
$i = 10;
echo ++$i+++$i; // 语法报错
加深理解示例:
<?php
$v1=10;
echo $v1++."<br>"; //结果:10
echo $v1."<br><br>"; //结果:11
$v2=10;
echo ++$v2."<br>"; //结果:11
echo $v2."<br><br>"; //结果:11
$v3=10;
echo $v=$v3+ ++$v3."<br><br>"; //结果:22
$v4=10;
echo $v=$v4+ $v4++."<br><br>"; //结果:21
$v5=10;
echo $v=$v5+$v5+ $v5++."<br><br>"; //结果:30
$v6=10;
echo $v=$v6+$v6+ ++$v6."<br><br>"; //结果:31
//按照从左到右的运算顺序,先是两个$v6,没有自加自减,可以先得出20
// 即=20+ ++$v6 即=31
$v7=10;
echo $v=$v7+ ++$v7+$v7+$v7++ +$v7."<br><br>"; //结果:56
//按照从左到右的运算顺序,前两项相加,但第二项是自加,所以
//++$v7先按照自加算法,运算完即如下(括号内代表此时$v7的值):
// $v=$v7(11)+$v7(11)+$v7(11)+$v7(11)++ +$v7(11)
//此时前三项不含自加自减运算可以直接相加,结果如下:
// $v=33+$v7(11)++ +$v7(11)
// 即$v=33+$v7(11)+$v7(12) 即最终结果:56
$v8=10;
echo $v8+=$v8+$v8++;//注意运算顺序:$v8=$v8+($v8+$v8++)结果:32
?>