我遇到了一个增量运算符的奇怪问题。下面的代码应该输出什么?
$j = 0;
for ($i=0; $i<100; $i++)
{
$j = $j++;
}
echo $j;
它回应0.为什么不是100?
修改:当我将$j = $j++
更改为$j = ++$j
时,它会回复100。
答案 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的原始值。