PHP增量功能

时间:2016-05-18 14:31:17

标签: php increment

有人可以解释为什么会发生这种情况:

$a[0] = 1;
$a[0] = $a[0]++;
echo $a[0];

在此代码中,a[0]始终为1.即使$a[0] = $a[0]++;多次执行,也不会增加a[0]的值。

但如果我们分配给这样的另一个变量:

$a[0] = 1;
$b[0] = $a[0]++;
echo $a[0];

$a[0]将设为2.(当然b[0]将为1)。

我无法理解为什么会这样。

4 个答案:

答案 0 :(得分:3)

从PHP文档:

  

PHP支持C风格的前后增量和减量运算符。

++$a  Pre-increment   Increments $a by one, then returns $a.
$a++  Post-increment  Returns $a, then increments $a by one.

(见http://php.net/manual/en/language.operators.increment.php

因此,当使用后增量($x++)时,如果将结果分配给另一个变量,则在增量发生之前,您将最终得到变量的值

答案 1 :(得分:3)

简化此操作以删除索引。这不是必需的。

$a = $a++;

首先,执行右侧。因为++在变量之后,它表示"返回$ a然后增加$ a。"它正是如此。它将$ a返回到赋值操作,然后递增$ a。

执行右侧后,分配操作将运行。右侧在增加之前返回$ a。所以,它仍然是$ a的原始值。这就是$ a的分配。这会覆盖刚刚发生在右侧的增量操作。

答案 2 :(得分:2)

由于您的++位于变量之后,这意味着它将在之后递增运算符返回原始值并且assinment运算符将其重新分配回原始值。

由于您在增量之前重新分配变量,因此该数字永远不会增加..

正确的方法是放弃重新分配..

$a[0] = 1;
$a[0]++;
echo $a[0];

https://3v4l.org/Tijrb

您也可以将++移动到开头,它将按预期运行:

$a[0] = 1;
$a[0] = ++$a[0];
echo $a[0];

https://3v4l.org/9fZ3U

答案 3 :(得分:2)

Okey,让我们从第一个开始。您将$a[0]的值指定为1,对其应用增量操作,但再次存储在$a[0]中,$a[0]尚未更新,导致增量为后增量。但是如果你以预增量的方式进行,那么你将得到值2.

例如:

$a[0] = 1;
$a[0] = $a[0]++;
echo $a[0]; //1

查看预增量的效果:

$a[0] = 1;
$a[0] = ++$a[0];
echo $a[0]; //2

<强>例如:2

与示例一相同,您进行了后增量,这次存储在不同的变量中,这意味着$a[0]未在此处更新,增量操作实现。所以你得到的结果为2.这里的帖子和前两者都是一样的。

$a[0] = 1;
$b[0] = $a[0]++;
echo $a[0]; //2

此处$b[0]的值与此阶段$a[0]的值相同。但如果在此处应用预增量,那么$b[0]的值也会发生变化并且其存储为2。

  

注意:您必须了解pre-increment和。{   post-increment。更多visit - language.operators.increment.php