PHP增量功能


PHP increment feature

有人能解释一下为什么会发生这种情况吗:

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

在该代码中,a[0]始终变为1。即使多次执行CCD_ 2,也不会增加CCD_。

但如果我们分配给一个不同的变量,比如:

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

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

我不明白为什么会发生这种事。

简化此操作以删除索引。不需要它。

$a = $a++;

首先,执行右侧。因为++在变量后面,它说"返回$a,然后增加$a"。它就是这么做的。它将$a返回给赋值操作,然后递增$a。

执行右侧之后,将运行分配操作。右侧在递增之前返回$a。因此,它仍然是a美元的原始价值。这就是$a的赋值。这将覆盖刚刚在右侧进行的增量操作。

来自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++)时,如果将结果分配给另一个变量,则在发生增量之前,您将得到变量的值。

好的,让我们从第一个开始。将$a[0]的值指定为1,对其应用增量操作,但再次存储在$a[0]中,$a[0]尚未更新,因为增量是增量后的。但是如果你把它作为预增量,那么你会得到值2。

Ex:1

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

查看预增量的效果:

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

Ex:2

与示例1相同,您做了后增量,这次您存储在不同的变量中,这意味着这里没有更新$a[0],并实现了增量操作。所以你得到的结果是2。这里的post和pre都是一样的。

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

在此,CCD_ 11的值将与在此阶段的CCD_ 12的值相同。但是如果在此应用预增量,则CCD_ 13的值也改变并且其存储2。

注意:您只需要理解pre-incrementpost-increment。更多访问-language.operators.increment.php

因为++在变量之后,这意味着它将在++运算符返回原始值后递增,assign运算符将其重新分配回原始值。

由于在增量之前重新分配变量,因此该数字永远没有机会增量。。

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

$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