我在这里有一个使用post fix和prefix operator的情况。看看下面的代码片段。我知道存在一些运算符优先级。但我需要对此作出明确的解释。
<?php
$a=0;
echo $a++ + ++$a; //this will result 2 that is ok
$b=0;
echo $b++ - ++$b; //this should result 0 isn't it? but am getting -2!
?>
更新:接受的答案描述未定义的行为
答案 0 :(得分:3)
如果您使用未定义的行为,这种情况总会发生。你所做的是未定义的行为。所以不要试图得到一个遵循确定性逻辑的解释,因为未定义是与此相反。
// mixing ++ and + produces undefined behavior $a = 1; echo ++$a + $a++; // may print 4 or 5
您在评论中扩展了您的问题:
echo $c=($b++) - (++$b);
此声明的结果也变为-2。你的未定义行为是什么意思?
$b = 0 and it shall:
$c=($b++) - (++$b); | $b is 0 - process first brackets
$c= 0 - (++$b); | $b is 1 - process second bracktes inner operator
$c= 0 - ($b); | $b is 2 - process second brackets
$c= 0 - 2; | calculate
$c= -2;
这显然是在执行代码时为您的代码生成的 。没有定义这将始终以这种方式计算,因此未定义。例如,如果首先处理第二个括号,您将得到不同的结果。
答案 1 :(得分:2)
由于Incrementing/Decrementing Operators (PHP doc)
<?php
$a=0;
echo $a++ + ++$a; // 0 + 2 = 2
$b=0;
echo $b++ - ++$b; // 0 - 2 = -2
?>
$a++
返回0
并将$a
增加1($a == 1
);
++$a
将$a
增加1($a == 2
)并返回2
答案 2 :(得分:2)
结果非常好:
$ a ++打印该值并立即递增它 ++ $ a输出前的增量
所以在第一种情况下,这就像:
0 + 2 = 2
在第二种情况下:
0 - 2 = -2
它就像它说的那样。
此致
史蒂芬