微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

参见英文答案 > 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
?>

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

原文地址:https://www.jb51.cc/php/136621.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐