PHP中的++运算符优先级

时间:2013-11-13 13:09:01

标签: php operators add

$i = 1;
$sum = $i + ($i++);

OR

$i = 1;
$sum = $i + $i + ($i++);

最终会得到结果$sum = 3,谁可以告诉我原因?

这是php中的测试代码。您可以自己执行或直接点击此链接:Demo来检查执行结果。为什么这个结果到底?

我想在这里提到menthion,我清楚地知道$ i ++和++ $我做了什么。我问的这个问题有点不同。请看一下“结果列表”。

$sum = $i + ($i++);  //$sum = 3;

$sum = $i + $i + ($i++); //$sum = 3;

得到了相同的结果!!

我知道代码应该用这种方式编写。我从朋友那里得到了这个,无法解释原因,所以请在这里要求清楚解释。

// Result list
// $i = 1;                              //Result
// $sum = $i + ($i++);                  //3 2   (Look at this)
// $sum = $i + $i + ($i++);             //3 2   (And this)
// $sum = $i + $i + $i + ($i++);        //4 2
// $sum = $i + $i + $i + $i + ($i++);   //5 2

// Test

$i = 1;
$sum = $i + ($i++);
echo   "Result: ", $sum, " ", $i, "<br />";

$i = 1;
$sum = $i + $i + ($i++);
echo   "Result: ", $sum, " ", $i, "<br />";

highlight_file(__FILE__);

3 个答案:

答案 0 :(得分:5)

$ i ++表示在处理$ i变量后添加1。

++是一个运算符,你必须把它放在你想要操作的变量的FRONT中,这样它就会在处理变量之前加上1。

$i = 0;
echo $i++; will echo 0;
$i = 0;
echo ++$i; will echo 1;

希望这有帮助。

答案 1 :(得分:1)

这是类C语言的基本主题之一,包括PHP,被称为运算符优先级。

在分配后

i++执行,而之前执行++i

示例:

$i = 1;
$j = 1 + $i++; // this is the same as : j = 1 + i; i += 1;
// Result: i = 2, j = 2;

$i = 1;
$j = 1 + ++$i; // this is the same as : i += 1; j = 1 + i;
// Result: i = 2, j = 3;

Proof

答案 2 :(得分:1)

是的,你是对的5.4我得到了以下:

$sum = $i + ($i++);      //3 2  , but should be 2 2
$sum = 0 + $i + ($i++);  //2 2  , correct 
$sum = $i + $i + ($i++); //3 2  , correct

我已经在5.0.5下进行了测试并得到了另一个结果。

“运算符优先级和关联性指定了分组,但它们没有指定组的执行顺序。在上一个示例中,($a + $a)($a++)可以先运行。

PHP没有指定实际发生的情况。一个版本的PHP可以为您提供一个结果,另一个版本为另一个。不要编写依赖于某些特定评估顺序的代码。“ https://gist.github.com/nikic/6699370