$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__);
答案 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;
答案 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