有人能解释一下为什么会出现这种情况吗:
$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)。
我不明白为什么会这样。
来自 PHP 文档:
当使用后增量 (PHP supports C-style pre- and post-increment and decrement operators.
++$a Pre-increment Increments $a by one, then returns $a. $a++ Post-increment Returns $a, then increments $a by one.
$x++
) 时,如果将结果分配给另一个变量,则最终将得到递增发生之前的变量值。详见 http://php.net/manual/zh/language.operators.increment.php。$a = $a++;
++
在变量后面,这意味着它会在++运算符返回原始值并且赋值运算符将其重新分配回原始值后递增。由于你在递增之前重新分配了变量,因此数字永远没有机会递增。
正确的方法是只需删除重新分配即可。$a[0] = 1;
$a[0]++;
echo $a[0];
$a[0] = 1;
$a[0] = ++$a[0];
echo $a[0];
$a[0]
的值赋为1,然后对其进行递增操作,但再次存储在$a[0]
中,因为递增是后置递增,所以$a[0]
尚未更新。但如果你使用前置递增,则会得到值2。
例子1:
$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。
注意:您需要理解
前增量
和后增量
。了解更多信息,请访问language.operators.increment.php