shifu900518123 2013-11-17 13:15 采纳率: 0%
浏览 1835
已采纳

PHP的一个坑-----自增运算符

$a=1;
echo $a+$a++; //3

$a = 1;
echo $a + $a + $a++; //3

输出都是3,为什么不先算$a++,玩了之后再和前面的$a相加,这样的话不是就是5了么

  • 写回答

1条回答 默认 最新

  • todd_leftcode 2013-11-17 14:50
    关注

    因为$a++是后置自增运算,是先求值再自增的。 ++$a是先自增再求值的。 这个在c/c++/java/c#。。。中都是一个套路。

    [UPDATE]
    以上说法极不严谨基本是错误的。

    虽然$a++为后置自增运算,即先求值再加1, 但依然不能阻止编译器先+1再求值,只要其+1的结果不影响求值结果。
    比如:$b = $a++; 可以拆解成 $c = $a; $a++; $b = $c; 当然这只是可能
    对于 $a + $a++; 按上边的路子会变成 $c = $a; $a++; return $a + $c; 结果可想而知了。
    但这些都是基于猜测,一切由编译器根据实际情况且不违背语言规范地决定。

    具体原理请google "顺序点"

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题