预增量与后增量

Wol*_*'08 6 php reference increment

他们有什么不同?这就是我的想法,但我不确定......

如果你使用预增量,例如在带有++ j的for循环中,那么你基本上是这样说:"复制j的值以便在循环中使用,然后增加j,然后遍历语句中的语句.循环使用j的副本." 如果你在相同的循环j ++中使用后递增,那么你基本上是这样说:"复制j的值以便在循环中使用,然后使用j的副本遍历循环中的语句,然后增加J".

我不确定的原因是因为我创建了一个for循环,它将j的值乘以10,然后使用post和pre-increment输出j = 1到j = 12的结果.人类可读输出与后增量和预增量完全相同.我在想,'如果不涉及某种复制操作,输出如何完全相同?'

所以,我猜测前后增量的区别真的变得很重要,在php中,当我使用引用(在php中作为指针)而不是返回值的名称时?这是因为没有进行引用的复制,所以预先递增将是:"递增j,然后通过改变的j值循环遍历循环中的语句,然后再次递增j ...",而后增量表示如下:"对循环中的语句使用j的值,然后更改j的值,然后使用j的新值进行循环..."

Wis*_*guy 24

增量前或后增加不会让事情延迟到晚些时候.这只是简单的内联速记.

在此输入图像描述

// pre-increment
$var = 5;
print(++$var); // increments first, then passes value (now 6) to print()

// post-increment
$var = 5;
print($var++); // passes value (still 5) to print(), then increments
Run Code Online (Sandbox Code Playgroud)

现在让我们看一个循环.

for ($i = 0; $i < 9; $i++) {
    print($i);
}
Run Code Online (Sandbox Code Playgroud)

循环声明的最后一部分($i++)只是每次循环后执行的语句.它将值"传递"到无处,然后递增它.$i当时没有在任何地方使用过.稍后当执行下一个语句(print($i);)时,值$i已经增加.

// add 1, then do nothing with $i
for ($i = 0; $i < 9; ++$i) {}

// do nothing with $i, then add 1
for ($i = 0; $i < 9; $i++) {}
Run Code Online (Sandbox Code Playgroud)

无论你采用哪种方式,$i循环内都是一样的.


如果它有帮助,您可以将它们视为一种小例程:

// ++$i
{
    $i = $i + 1;
    return $i;
}

// $i++
{
    return $i;
    $i = $i + 1;
}
Run Code Online (Sandbox Code Playgroud)

当我重读你的问题时,我认为混淆更多的是循环如何工作而不是增量运算符的工作方式.请记住,增量是一个简单的,一次性操作,这是循环中第三个表达式的工作原理.

// here's a basic loop
for ($i = 0; $i < 9; $i++) {
    // do loop stuff
    print($i);
}

// this is exactly what happens
for ($i = 0; $i < 9; ) {
    // do loop stuff
    print($i);

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

只是因为最后一行可以放在循环声明中并没有赋予它任何特殊的权力.幕后没有任何参考或任何使用.$i在循环内部和外部都可以看到相同的变量.循环内部或外部的每个语句都直接查找$i必要时的值.而已.没有好笑的事.