有人能解释一下为什么会发生这种情况吗:
$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-increment
和post-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