sujin190
V2EX  ›  问与答

好奇怪的 php 计算结果

  •  
  •   sujin190 · Jul 15, 2014 · 4389 views
    This topic created in 4500 days ago, the information mentioned may be changed or developed.
    $a=2;$b=&$a;echo (++$a)+($a++);
    $a=2;$b=$a;echo (++$a)+($a++);

    为什么上面是7下面是6呢?
    18 replies  •  2014-07-15 21:17:38 +08:00
    0xef
    0xef
    Jul 15, 2014
    1
    AlanZhang
    AlanZhang
    Jul 15, 2014
    2
    @0xef 明明是6,怎么是7呢。
    sujin190
    sujin190
    OP
    Jul 15, 2014
    3
    @0xef

    C:\Users\su>php --version
    PHP 5.4.16 (cli) (built: Jun 6 2013 17:02:22)

    C:\Users\su>php -r "$a=2;$b=&$a;echo (++$a)+($a++);"
    7

    C:\Users\su>php -r "$a=2;$b=$a;echo (++$a)+($a++);"
    6

    这有是怎么回事呢?有点不合常理嘛
    lizheming
    lizheming
    Jul 15, 2014
    4
    zakokun
    zakokun
    Jul 15, 2014❤️1
    5
    纠结这种问题的人都....算了不说了
    0xef
    0xef
    Jul 15, 2014❤️1
    6
    我猜测是之前有个Bug

    在内部处理的时候,当一个变量有两个或者更多ref count的时候,一个表达式里的(++$a)会被立即返回,而不是存储到一个新的临时变量里以完成最终的表达式计算
    churchmice
    churchmice
    Jul 15, 2014❤️3
    7
    我只能说谭浩强的书看多了吧,能写出这种代码的我非打他一顿
    dndx
    dndx
    Jul 15, 2014❤️1
    8
    没事找事,好好的代码不写非写这种蛋疼代码。
    66450146
    66450146
    Jul 15, 2014❤️1
    9
    敢把这样的代码传到我的 repo 里面的我非得揍他一顿

    一个表达式里面多次存取一个变量的行为本来就是无法预期的。把产品建立在无法预期的东西的基础上,你猜老板会怎么想?
    KKKKale
    KKKKale
    Jul 15, 2014
    10
    lygmqkl
    lygmqkl
    Jul 15, 2014
    11
    代码写成这样我只想说,zuo的节奏,没必要。在大公司会被警告的。
    lincanbin
    lincanbin
    Jul 15, 2014❤️1
    12
    http://zh.wikipedia.org/wiki/%E6%9C%AA%E5%AE%9A%E4%B9%89%E8%A1%8C%E4%B8%BA
    未定义行为在任何语言中都应该避免,不止是C。
    哪怕PHP的解释器只有官方那一种,也不能这样做,会被队友打死的。
    66450146
    66450146
    Jul 15, 2014❤️1
    13
    @sujin190 这个很正常,一点也不会“不合常理”

    @0xef 这不是一个 bug,因为根本就没有“正确的行为”
    kankana
    kankana
    Jul 15, 2014❤️1
    14
    @66450146

    恩,php开发者nikic在reddit上也是这样说过,不保证顺序.
    zaishanfeng2014
    zaishanfeng2014
    Jul 15, 2014
    15
    最恨面试出这种题目的sb公司,遇到这样的躲得越远越好
    sujin190
    sujin190
    OP
    Jul 15, 2014
    16
    sujin190
    sujin190
    OP
    Jul 15, 2014
    17
    @66450146
    @kankana
    @lincanbin
    嗯,这个只是无意中看到的,以前记得有人说过这事,只是一下子忘掉了,有点奇怪,不过确实不应该这么写
    usedname
    usedname
    Jul 15, 2014
    18
    这样有意义么?有使用价值么?真的看到就烦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2546 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 11:58 · PVG 19:58 · LAX 03:58 · JFK 06:58
    ♥ Do have faith in what you're doing.