为什么for-loop不关心增量的方式?

32b*_*oat 0 php for-loop increment

这可能是一个滑稽的"问题",但我只是没有看到这种行为的原因.


事实:

$i++;
Run Code Online (Sandbox Code Playgroud)

返回当前值,然后将$ i递增1.

++$i;
Run Code Online (Sandbox Code Playgroud)

将$ i递增1然后返回$ i.


情况:

for($i = 0; $i < 10; ++$i){
    echo $i."\n";
}
Run Code Online (Sandbox Code Playgroud)

0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

第二:

for($i = 0; $i < 10; $i++){
    echo $i."\n";   
}
Run Code Online (Sandbox Code Playgroud)

也给了

0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

如果我按字面意思获取增量的文档,我会解释循环如下:

  1. 在每次迭代结束时,$ i加1然后返回,所以我们首先得到0因为$ i从0开始,然后是1等.
  2. 在每次迭代结束时,返回$ i并且THEN递增,这恰好意味着有两次迭代,其中$ i = 0.


事实并非如此.有人可以解释一下,为什么?

Jos*_*ber 6

$i没有被退回,它被使用(由你).很大的区别.

如果您要重写if语句而不是使用while循环,那么您将拥有以下内容:

后增量:

$i = 0;

while ( $i < 10 ) {
    echo $i."\n";
    $i++;
}
Run Code Online (Sandbox Code Playgroud)

预增:

$i = 0;

while ( $i < 10 ) {
    echo $i."\n";
    ++$i;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,两者之间没有区别.


以下是您为for循环提供的3个语句的用途:

  1. 之前运行的第一个步骤
  2. 每个步骤之前运行(使用返回的值来确定是否继续循环)
  3. 运行后,每一步

在任何方面都不会以任何方式使用第三个语句的返回值.


PS如上所述,第三个语句在每个循环之后运行,包括最后一个循环.通过$i在循环完成后访问变量,这一点很明显:

for ($i = 0; $i < 10; $i++) {
    echo $i."\n";
}
echo $i;
Run Code Online (Sandbox Code Playgroud)

这将列出所有数字,包括 10.

请在此处查看:http://viper-7.com/Y6N2jU