Php 我不知道';我不理解此代码中的预增量部分
有人能向我解释为什么这个代码的输出是22而不是21吗Php 我不知道';我不理解此代码中的预增量部分,php,Php,有人能向我解释为什么这个代码的输出是22而不是21吗 $x=10; $x+=++$x; echo $x; x正由存储的递增值x递增 x += (x = x + 1). 首先评估此作业的右侧: 增量$x→ $x现在是11,表达式+$x的结果是11 取$x(11)的值,并将步骤1的结果添加到其中→ 22 将步骤2的结果分配给$x 在内部,这被评估为: # op ext return operands -------------------------------------
$x=10;
$x+=++$x;
echo $x;
x正由存储的递增值x递增
x += (x = x + 1).
首先评估此作业的右侧:
$x
→ $x
现在是11
,表达式+$x
的结果是11
$x
(11
)的值,并将步骤1的结果添加到其中→ <代码>22$x
在内部,这被评估为:
# op ext return operands
-------------------------------------
1 ASSIGN !0, 10
2 PRE_INC $2 !0
3 ASSIGN_ADD 0 !0, $2
4 ECHO !0
$x
(上面称为!0)$x
,即。
- 将1添加到
$x
- 返回新结果(11)
$x
(现在为11)增加步骤2的返回值(也是11)(为了可读性编辑了VLD输出,请参见此处的完整版本:)其全部内容与操作顺序有关 $a+=$b只是$a=$a+$b的简写。现在,用这些知识“展开”你的第二行:
$x = $x + (++$x);
为了给$x赋值,我们必须首先计算赋值的右边。要做到这一点,我们首先需要执行++操作,然后才可以添加右边的变量
那么,在这个上下文中,操作符++是什么呢?它又是一个函数的简写,其功能类似于:
function preIncrement(&$variable) {
$variable = $variable + 1;
return $variable;
}
请注意,variable是一个引用(&$variable,而不是$variable)。这意味着,在函数内部,如果我们修改变量,它将修改传递给它的变量,在外部。因此,当我们传递$x时,函数增加$x,然后返回一些数值。将在赋值的右侧替换该数值。
所以,当这条线看起来像是:
$x = $x + postIncrement($x);
因此,为了进行评估,我们需要首先执行赋值中的函数,并获得函数的返回值。正好是11点。太好了,现在我们知道我们需要增加11到x美元
$x = $x + 11;
太好了,我们只需读取当前的$x值,就可以分配$x是11。当我们执行它时,postIncrement函数将其增加到11。因此:
$x = 11 + 11;
$x = 11 + 10;
现在,$x是22
让我们将其与增量后进行比较:
$x+=$x++;
展开+=
$x = $x + $x++;
与前面一样,我们需要先获得$x++的返回值,然后才能进行计算。后增量看起来像这样:
function postIncrement(&$variable) {
$oldValue = $variable;
$variable = $variable + 1;
return $oldValue;
}
因此它接受我们的$x,增加它的值,但返回原始值。因此,$x++的计算结果为10。现在我们得出:
$x = $x + 10;
好的,让我们评估一下$x$x是11。当我们执行它时,后增量增加了它。因此:
$x = 11 + 11;
$x = 11 + 10;
在这种情况下,x是21
希望这对您有所帮助。首先,x被设置为10,然后++将其设置为11,最后11被添加到自身中,即22。您能解释一下为什么您希望它是21吗?
++
之后是21。