【问题标题】:Incrementing a string producing unexpected results增加一个产生意外结果的字符串
【发布时间】:2013-06-18 16:16:25
【问题描述】:

我只是在玩 PHP,谁能解释一下为什么下面的代码打印出 5566 而不是 6666?

$a = 5;
$b = $a;

echo $a++ . $b++;
echo "\n";
echo $a++ . $b++;

它会回显 $a 然后加 1 吗?为什么不回显结果?

编辑: 任何人都可以查看的另一个简单示例:

$a = 5;
$b = $a++;
echo $a++ . $b;

产生65

【问题讨论】:

  • 使用前置自增运算符
  • 5566 是这里的预期输出。 echo $a++ 先打印 $a 然后增加值,而 echo ++$a 将先增加 $a 然后打印它:)

标签: php increment


【解决方案1】:

当您首先进行后增量时,会返回值,然后将其递增 1,这就是您得到此类结果的原因。

如果您先进行预增量,则将值添加到 $a 然后返回,因为您将看到 66 和 77

echo ++$a . ++$b;

将如您预期的那样打印 66。

注意 pre incrementation/decrementaiton 比 post 快,这就是为什么如果您不需要在递增/递减之前先显示该值,请使用它。

Morover,如果你使用参考

 $a = 5;
 $b = &$a;

 echo $a++ . $b++;

它将输出 56

 $a = 5;
 $b = &$a;

 echo ++$a . ++$b;

将输出 77 :)

【讨论】:

    【解决方案2】:

    因为 $a++ 是后递增它返回值然后递增值。

    尝试:

    echo ++$a . ++$b;
    echo "\n";
    echo $a++ . $b++;
    

    和这个一样

    $a++;
    $b++;
    echo $a . $b;
    echo "\n";
    echo $a . $b;
    $a++
    $b++;
    

    【讨论】:

      【解决方案3】:

      在您的代码中,IN 首先回显它返回 $a 的值,然后它的增量类似于 $b。

      这里是$a++的解释:

      ++$a    Pre-increment   Increments $a by one, then returns $a.
      $a++    Post-increment  Returns $a, then increments $a by one.
      --$a    Pre-decrement   Decrements $a by one, then returns $a.
      $a--    Post-decrement  Returns $a, then decrements $a by one.
      

      希望对你理解有所帮助。

      同时检查以下问题:

      Pre-incrementation vs. post-incrementation
      What's the difference between ++$i and $i++ in PHP?

      【讨论】:

        【解决方案4】:

        它是一个POST-INCREMENT OPERATOR,所以这个值首先被使用(即 5)然后递增,所以你得到 5566。

        echo $a++ . $b++;  // echo 55 and then a becomes 6 , b becomes 6
        echo "\n";
        echo $a++ . $b++; // echo 66
        

        【讨论】:

          【解决方案5】:

          应该是回声

           55
           66
          

          因为当您将++ 放在(后缀)之后,则在执行语句后完成增量。如果你愿意

           66
           66
          

          然后做

          $a = 5;
          $b = $a;
          
          echo ++$a . ++$b;
          echo "\n";
          echo $a++ . $b++;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多