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

前端之家收集整理的这篇文章主要介绍了为什么这两个后期增加的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
?>

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

猜你在找的PHP相关文章