为什么后增量运算符($ j ++)永远不会从0改变$ j?

时间:2012-02-18 02:42:15

标签: php increment

我遇到了一个增量运算符的奇怪问题。下面的代码应该输出什么?

$j = 0;
for ($i=0; $i<100; $i++)
{
    $j = $j++;
}
echo $j;

它回应0.为什么不是100?


修改:当我将$j = $j++更改为$j = ++$j时,它会回复100。

3 个答案:

答案 0 :(得分:7)

你正在进行“后增量”,因为++出现在它正在修改的变量之后。代码以不太紧凑的形式写出,归结为:

for ($i = 0; $i < 100; $i++) {
   $temp = $j;  // store j
   $j = $j + 1;  // $j++
   $j = $temp; // pull original j out of storage
}

如果你有++$j,则j将增加FIRST,并且得到的递增值将被分配回J.但是,这样的结构没有多大意义。你可以简单地写出来

 for (...) {
    $j++;
 }

归结为

for (...) {
   $j = $j + 1;
}

答案 1 :(得分:6)

问题在于

$j = $j++;

此命令将$j评估为0,然后将$j递增为1,最后将0分配回$j

使用$j = $j + 1;$j++;

答案 2 :(得分:3)

$j++是后增量:表达式的值为$j,然后$j递增。所以你得到j的值,然后递增j,然后将j设置为j的原始值。