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

ste*_*eve 2 php increment

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

$j = 0;
for ($i=0; $i<100; $i++)
{
    $j = $j++;
}
echo $j;
Run Code Online (Sandbox Code Playgroud)

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


编辑:当我改为$j = $j++$j = ++$j,它回应100.

Mar*_*c B 7

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

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

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

 for (...) {
    $j++;
 }
Run Code Online (Sandbox Code Playgroud)

归结为

for (...) {
   $j = $j + 1;
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*iss 6

问题在于线路

$j = $j++;
Run Code Online (Sandbox Code Playgroud)

此命令的计算结果$j为0,然后递增$j为1,最后将0的赋值返回$j.

使用$j = $j + 1;或只是$j++;.

  • @AaronW.这可行,但它既冗余又令人困惑.我的团队永远不会允许它通过代码审查. (3认同)