php - 预增量与后增量

标签 php reference increment

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

如果您使用预递增,例如在带有++j 的 for 循环中,那么您基本上是在说:“复制 j 的值以供在循环中使用,然后递增 j,然后遍历循环中的语句与 j 的副本。”如果您在同一个循环 j++ 中使用后递增,那么您基本上是在说:“复制 j 的值以供在循环中使用,然后使用 j 的副本遍历循环中的语句,然后递增j”

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

所以,我猜测在 php 中,当我使用引用(在 php 中充当指针)而不是返回值的名称时,前增量和后增量之间的区别真的很重要吗?这是因为没有创建引用的副本,所以预递增将是:“递增 j,然后使用 j 的更改值遍历循环中的语句,然后再次递增 j ...”,而后 -递增看起来像:“将 j 的值用于循环中的语句,然后更改 j 的值,然后使用 j 的新值完成循环...”

最佳答案

Pre- or post-incrementing不要神奇地把事情拖到以后。它只是内联速记。

enter image description here

// 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

现在让我们看一个循环。

for ($i = 0; $i < 9; $i++) {
    print($i);
}

循环声明的最后一部分($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++) {}

无论采用哪种方式,$i 在循环中都是相同的。


如果有帮助,您可以将它们视为执行以下操作的小例程:

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

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

当我重读你的问题时,我认为混淆更多的是循环的工作方式,而不是增量运算符的工作方式。请记住,递增是一种直接的、一次性的操作,下面是循环中第三个表达式的工作原理。

// 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++;
}

仅仅因为最后一行可以放在循环声明中并没有赋予它任何特殊的权力。没有引用资料或幕后使用的任何东西。在循环内外都可以看到相同的 $i 变量。循环内部或外部的每个语句在必要时直接查找 $i 的值。而已。没有有趣的事情。

关于php - 预增量与后增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400518/

相关文章:

java - += 和 =+ 有什么区别?

php - CloudFlare Flexible SSL with Wordpress(模板 URL)

php - 填有mysql数据的pdf表格

java - Java 对象引用是如何工作的?

c++ - 为什么复制构造函数的参数是引用而不是指针?

c - 为什么这些构造使用增量前和增量后未定义的行为?

java - 递增图像的 x 位置然后递减它在 java 中不起作用

php - 如果在单个表 php 中更新了 parent 的值,则更新 child 的值

javascript - jQuery ajax 引用网址

java - 从 java.lang.reflect.Method 对象获取方法引用