【问题标题】:How does php evaluate the expression $x+++$x++?php如何评估表达式$x++$x++?
【发布时间】:2016-12-04 23:33:38
【问题描述】:

请看下面的表达式:

$x = 20;

echo $x+++$x++; // 41

为什么答案是41 而不是43

【问题讨论】:

  • @AlexanderLomia 因为echo $x++; 单独输出20,而不是21
  • 专业提示:避免晦涩的案例。
  • 因为$x++ 是一个后增量
  • @u_mulder 我明白了,但同样,我不明白为什么它不是 20 + 20(如果 + 具有最高优先级)或 21 + 21(如果第一个 ++ 具有最高优先级)

标签: php


【解决方案1】:

表达式

$x+++$x++

被评估为

($x++) + ($x++)

$x++ 返回$x 的值,然后将其递增1。所以,这个:

$x = 20;
$y = $x++;

您最终得到$y == 20$x == 21。现在,将其应用于您的表达式:

$x = 20;
($x++) + ($x++);

我们首先将$x++ 返回为20,同时将$x 增加到21;第二个 $x++ 返回为 21,同时将 $x 增加到 22。所以:

20 + 21

计算结果为 41,但请注意 $x 现在设置为 22。

【讨论】:

    【解决方案2】:

    尽管我在 PHP 文档中找不到任何提及,但我猜 PHP 是从右侧计算的,++ 在 C/C++ 中的行为类似于相同的运算符(请参阅 inc/dec PHP operator docs

    所以,表达式:

    $x+++$x++
    

    事实上(从右边评估):

    1. 得到x→20的值
    2. 增加x→21的值
    3. 得到x→21的值
    4. 增加x→22的值
    5. 13 的值 得到 相加 → 41

    但值得一提的是,在这种情况下,即使从左侧计算表达式也会获得相同的结果。

    【讨论】:

    • 别猜了,+ 是左结合运算符。
    • @u_mulder 关联性仅在您连续有多个具有相同优先级的运算符时才重要。这里只有一个+
    【解决方案3】:

    $x+++$x++;

    1. 开始获取值的总和
    2. 第一个值$x (20)
    3. 递增 $x(现在 $x 为 21)
    4. 第二个值$x (21)
    5. 获取 firstsecond 值的总和 - 20 + 21 = 41
    6. 递增$x(现在$x 为22)

    另一个要阅读的问题 - What's the difference between ++$i and $i++ in PHP?

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2016-05-26
      • 2011-11-08
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多