有人可以解释为什么会发生这种情况:
$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)。
我无法理解为什么会这样。
答案 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];
您也可以将++移动到开头,它将按预期运行:
$a[0] = 1;
$a[0] = ++$a[0];
echo $a[0];
答案 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