爬坑:彻底搞懂php自加自减运算

核心运算原则:

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
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值