【发布时间】:2017-07-19 19:15:44
【问题描述】:
我阅读了PHP.net docs,其中指出:
运算符 ** 的优先级高于 ++。
但是当我运行这段代码时,我得到了意想不到的输出:
<?php
$a = 2;
echo(++ $a ** 2);
// output: 9, means: (++$a) ** 2
// expected: 5, means: ++($a ** 2)
你能帮我弄清楚为什么会这样吗?谢谢!
【问题讨论】:
-
也许尝试将加号放在
$a-($a++ ** 2)之后。++$i是预增量,而$i++是后增量。 -
是的,您的代码按预期工作(先指数,然后递增)。我想知道为什么我的代码没有(至少与文档所说的相比)。
-
运算符优先级和关联性仅决定表达式的分组方式,它们不指定求值顺序。
-
AbraCadaver 说得通。我在这件事上找到了这篇文章:gist.github.com/nikic/6699370
-
echo($a++ ** 2);给我4然后echo($a)给我3。所以PHP内部评估($a ** 2)并返回结果。在稍后阶段,它会更新$a的值。
标签: php operators operator-precedence