Php 为什么for循环不关心增量的方式?

Php 为什么for循环不关心增量的方式?,php,for-loop,increment,Php,For Loop,Increment,这很可能是一个滑稽的问题,但我不明白这种行为的原因 事实: $i++; 返回当前值,然后将$i递增1 ++$i; 将$i递增1,然后返回$i 情况: for($i = 0; $i < 10; ++$i){ echo $i."\n"; } 第二: 如果我按照字面理解增量的文档,我会如下解释循环: 在每次迭代结束时,$i递增1,然后 返回,所以我们首先得到一个0,因为$i开始时是0,然后是1,等等。 在每次迭代结束时,返回$i,然后递增, 这就意味着有两次迭代,$i= 0 事实上

这很可能是一个滑稽的问题,但我不明白这种行为的原因

事实:

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

++$i;
将$i递增1,然后返回$i

情况:

for($i = 0; $i < 10; ++$i){
    echo $i."\n";
}
第二:

如果我按照字面理解增量的文档,我会如下解释循环:

在每次迭代结束时,$i递增1,然后 返回,所以我们首先得到一个0,因为$i开始时是0,然后是1,等等。 在每次迭代结束时,返回$i,然后递增, 这就意味着有两次迭代,$i= 0 事实上,这不是真的。有人能解释一下原因吗?

$i没有被退回,而是被您使用。差别很大

如果您要重写If语句以使用while循环,您将有:

增加员额:

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


请参见此处的操作:

对变量进行后递增或预递增,因为循环中的第三个表达式不会对其行为产生影响

因为,$i++和+++$i都会在循环的每次迭代结束时执行。

据我所知,for循环会在执行第三个参数之前检查第二个参数中的条件。这意味着,在这两种情况下:

$i使用值0初始化。显然,对于每个后续迭代,都会跳过此步骤; $i与10相比更小;然后 $i是递增的。
在最后一步中,$i的值是在增量之前还是之后返回并不重要,因为在任何比较中都没有实际使用$i的返回值。在进行比较之后,存储在内存中的$i的实际值仍然会在每次迭代中增加一个。

如果您将for循环作为If语句序列写入,我认为$i每次增加的原因会更有意义

i = 0
if i > 10
    return
else
    print i
    i++ // or ++i
if i > 10
    return
else
    print i
    i++ // or ++i

依此类推。

for循环有3个组件:

初始化组件在第一个“;”之前插入代码 终止条件是第一个“;”之间的代码第二个“;” 第二个“;”后面的增量 这3段代码的执行顺序如下:

1仅在for循环开始时执行一次

2在每次迭代之前进行验证

3在每次迭代后执行

因此,使用递增操作的前缀或后缀形式并不重要;每次迭代后,将执行增量3,您将获得增量变量的新值

这:

for($i = 0; $i < 10; $a = $i++){
    echo $i."\n";
}
与此相比,

for($i = 0; $i < 10; $a = ++$i){
    echo $i."\n";
}

将在每次迭代后对$a的值产生差异,但对$i的值不会产生差异

操作总是在循环结束时发生。不管你是在增量后还是在增量前,最后都可以把它看作是一个单独的语句。多亏了你的回答,我才发现设置语句和返回内容之间的区别。这也是为什么$i+2而不是$i=$i+2在循环的这一部分不起作用的原因。他知道,他在问为什么?我想你的答案有点复杂。对于循环:1。初始化2。比较,运行3。定期的加薪因此,无论是post还是pre增量,它都发生在循环代码运行之后和下一次比较之前。@Rawr是的,可能是这样。但是我能说什么呢?我只是一个令人费解的人。不过我最喜欢你的答案,因为它实际上列出了for循环阶段。但当我读到最后一段时,我想说什么?
$i = 0;

while ( $i < 10 ) {
    echo $i."\n";
    $i++;
}
$i = 0;

while ( $i < 10 ) {
    echo $i."\n";
    ++$i;
}
for ($i = 0; $i < 10; $i++) {
    echo $i."\n";
}
echo $i;
i = 0
if i > 10
    return
else
    print i
    i++ // or ++i
if i > 10
    return
else
    print i
    i++ // or ++i
for($i = 0; $i < 10; $a = $i++){
    echo $i."\n";
}
for($i = 0; $i < 10; $a = ++$i){
    echo $i."\n";
}