参见英文答案 >
PHP operator precedence “Undefined order of evaluation”?3个
我试图通过localhost在PHP中运行以下代码,但它给出了意想不到的输出!
我试图通过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 ?>
我希望这是有道理的.你是对的,这背后没有硬性逻辑.