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

或者

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

最终会得到结果$sum = 3,谁能告诉我为什么?

这是php中的测试代码。你可以自己执行或者直接点击这个链接:Demo查看执行结果。为什么最后会得到这个结果?

我想在这里提一下,我很清楚 $i++ 和 ++$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__);
4

3 回答 3

5

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

++ 是一个运算符,您必须将它放在要操作的变量的前面,这样它会在处理变量之前添加 1。

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

希望这可以帮助。

于 2013-11-13T13:14:30.177 回答
1

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

i++在赋值之后执行,while++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;

证明

于 2013-11-13T13:22:45.133 回答
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

于 2013-11-13T13:38:40.910 回答