Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我不知道';我不理解此代码中的预增量部分_Php - Fatal编程技术网

Php 我不知道';我不理解此代码中的预增量部分

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 -------------------------------------

有人能向我解释为什么这个代码的输出是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
    -------------------------------------
    1 ASSIGN                   !0, 10
    2 PRE_INC          $2      !0
    3 ASSIGN_ADD    0          !0, $2
    4 ECHO                     !0
    
  • 10分配给
    $x
    (上面称为!0
  • 增量前
    $x
    ,即。
    • 1添加到
      $x
    • 返回新结果(11
  • $x
    (现在为11)增加步骤2的返回值(也是11
  • 回显结果(22

  • (为了可读性编辑了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。