PHP 5.x中是否仍然存在增量操作的未定义行为?

PHP 5.x中是否仍然存在增量操作的未定义行为?,php,Php,可能重复: 这个问题的目标是PHP5.x 在手册中: 在哪个平台或版本上我可以得到5?似乎4每次都是合乎逻辑和正确的答案 我知道在Java中这不是未定义的行为,所以我想知道这是否在PHP5.x中也得到了解决?似乎在PHP5.3中消失了 试过了: while (true) { $a = 1; $test = ++$a + $a++; if ($test != 4) { die ($test); } } 未定义的行为意味着它可能会在未来的P

可能重复:

这个问题的目标是PHP5.x

在手册中:

在哪个平台或版本上我可以得到5?似乎4每次都是合乎逻辑和正确的答案


我知道在Java中这不是未定义的行为,所以我想知道这是否在PHP5.x中也得到了解决?

似乎在PHP5.3中消失了

试过了:

while (true) {
    $a = 1;
    $test = ++$a + $a++;
    if ($test != 4) {
            die ($test);
    }
}

未定义的行为意味着它可能会在未来的PHP版本中更改,因为对于这种表达式,运算符优先级的规则是不明确的


这并不意味着你会在同一个版本中随机得到4或5个,如果将来它会改变,我会感到惊讶。只是页面上的规则模棱两可

你为什么要复制未定义的内容?@Dale-我不认为未定义的意思是“随机”。我从手册中了解到,不同的平台可能会提供不同的结果。就像支持PHP的底层C代码一样,操作数求值顺序没有定义。表达式将始终从右向左求值,但在求值之前,操作数将减少到定义的值。因此,如果首先计算
$a++
,结果将是5。这种情况的发生取决于机器和编译器。您应该首先以一种没有歧义的方式编写代码,因此永远不应该编写类似于此的任何可能重复的代码
while (true) {
    $a = 1;
    $test = ++$a + $a++;
    if ($test != 4) {
            die ($test);
    }
}