加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

为什么这两个后期增加的PHP给出了相同的答案?

发布时间:2020-12-13 13:11:07 所属栏目:PHP教程 来源:网络整理
导读:参见英文答案 PHP operator precedence “Undefined order of evaluation”?3个 我试图通过localhost在PHP中运行以下代码,但它给出了意想不到的输出! ?php $a = 1; echo ($a+$a++); // 3? //答案是3,但由于后期增加,答案应为2 这是另一个代码,它给出了相同
参见英文答案 > PHP operator precedence “Undefined order of evaluation”?3个
我试图通过localhost在PHP中运行以下代码,但它给出了意想不到的输出!
<?php
    $a = 1;
    echo ($a+$a++); // 3
?>

//答案是3,但由于后期增加,答案应为2
这是另一个代码,它给出了相同的答案!为什么?

<?php
   $a = 1;
   echo ($a+$a+$a++);
?>

//答案仍然是3 !!!

PHP手册说明如下:

Operator precedence and associativity only determine how expressions are grouped,they do not specify an order of evaluation. PHP does not (in the general case) specify in which order an expression is evaluated and code that assumes a specific order of evaluation should be avoided,because the behavior can change between versions of PHP or depending on the surrounding code.

那么归结为什么,PHP没有明确定义这些类型的语句的最终结果,甚至可能在PHP版本之间发生变化.我们称之为未定义的行为,您不应该依赖它.

您可能能够在源中的某处找到确切原因,为什么选择此顺序,但可能没有任何逻辑.

您的两个示例正在评估如下:

<?php
  $a = 1;
  echo ($a + $a++); // 3
?>

真的变成了:

<?php
  $a = 1;
  $b = $a++;
  echo ($a + $b); // a = 2,b = 1
?>

你的第二个例子:

<?php
  $a = 1;
  echo ($a + $a + $a++); // 3
?>

变为:

<?php
  $a = 1;
  $b = $a + $a;
  $a++;
  echo $b + $a; // 3
?>

我希望这是有道理的.你是对的,这背后没有硬性逻辑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读