【问题标题】:Why post increment and pre increment is equal here?为什么在这里后增量和前增量是相等的?
【发布时间】:2018-06-29 17:59:15
【问题描述】:

当我尝试使用下面的代码作为 $j 的后增量或前增量时,结果总是相同的。你知道为什么吗?请告诉我。谢谢。

<?php
$j = 1;
while( $j < 20 ) {
    $j++;
    echo "1 * $j is equal to $j <br/>";
}
?>

【问题讨论】:

  • 因为$j++ 自己在一条线上。它不是在$j 的增量之前或之后出现的另一个表达式的一部分。当它自己在一条线上时 $j++;++$j; 做同样的事情。问问你自己:“在什么之后增加j before what?" or "increment j`”?现在,如果你有 while ($j++ &lt; 20) ...,那么 $j 将在 与 20 比较后递增。而如果你写 while (++$j &lt; 20) ...$j 的值将在 之前递增 $j 与 20 进行了比较。这是因为现在 $j 是一个更大的表达式的一部分,其中顺序很重要。
  • @lurker 最好最详细的解释。
  • 感谢您的解释。

标签: php increment post-increment pre-increment


【解决方案1】:

在这段代码中:

$j = 1;
while( $j < 20 ) {
    $j++;
    echo "1 * $j is equal to $j <br/>";
}

这里写$j++; 还是这里写++$j; 都没有关系,因为$j++ 是单独一行的。它不是在$j 的增量之前或之后出现的另一个表达式的一部分。当它自己在一条线上时,$j++;++$j; 做同样的事情。问问你自己:“在什么之前增加$j?”或“在什么之后增加$j”?

现在如果你有:

$j = 1;
while( $j++ < 20 ) {
    echo "1 * $j is equal to $j <br/>";
}

$j 将在 与 20 比较后递增。此循环将在 2 到 19 的输出中显示 $j 的值。

如果你写了

$j = 1;
while( ++$j < 20 ) {
    echo "1 * $j is equal to $j <br/>";
}

$j 的值将在 $j 与 20 进行比较之前递增。此循环将在 2 到 20 的输出中显示 $j 的值。

这是因为现在$j 是一个更大的表达式的一部分,其中增量的顺序很重要。

【讨论】:

  • 感谢您的详细解释。所以问题是,当 post 和 pre-increment 在逻辑中使用时,它们的值会有所不同,如果它们用作一条线,那么它们的值不会不同,对吧?
  • @M.SShohan 是的。 pre-或post-increment 意味着它在被评估的表达式中使用前或后。如果表达式只是$j,那么显然它没有任何效果。如果您认为我的回答可以接受,请在有机会时将其标记为已接受。 :)
【解决方案2】:

在这段代码中 $j=1 我们初始化然后我们检查它是否满足条件然后它增加 $j=2 的值现在 $j 的原始值是 2。因此在 echo 语句中 1*$j 是等于 $j 表示 1*2 等于 2。 像这样,所有迭代都将一直进行,直到循环结束。 就好像我们使用相同情况的预增量将发生第一个值增量然后通过原始值计算相同的输出

【讨论】:

  • 在这两种情况下,该值都会有所不同,因为它取决于您在逻辑语句之前或之后使用该语句或行的位置
猜你喜欢
  • 2012-09-15
  • 2012-03-07
  • 1970-01-01
  • 2011-01-02
  • 2014-12-06
  • 2014-12-09
  • 2012-06-01
  • 2011-09-18
相关资源
最近更新 更多