1 回答
TA贡献1921条经验 获得超9个赞
这里的关键角色是运算符优先级,因此,尽管是表达式中的最后一个元素,但首先$a++计算(在 ie 之前)。请注意,其中的意思是对该表达式(变量)的操作后评估,而不是对整个表达式(代码行)的评估。$apostpost increment
在您的第一种情况下,代码是这样的:
$result = 3 * $a++;
所以$a用于乘法的值是3因为它是先读取然后递增的。该表达式中不再$a使用,因此新值 of$a并不重要,除非$a再次引用,否则不会影响我们:
$a = 3
$result = 3 * $a++
= 3 * 3
// $a is 4 now
= 9
第二种情况不同:
$result = $a * $a++;
因为我们对$a. 评估将是这样的:
$a = 3
$result = $a * $a++
= $a * 3 // value of `$a` is 4 after post-increment
// evaluation, and this affects us as we
// evaluate $a again
= 4 * 3
= 12
为了答案的完整性,让我们再添加一个案例:
$result = $a++ * $a++;
评估将类似地进行,$a最后具有不同的价值:
$a = 3
$result = $a++ * $a++
// $a is 4 now
= 3 * $a++
= 3 * 4
// $a is 5 now
= 12
一旦你理解了这一点,这看起来很清楚,但另一方面很好地展示了你可以通过编写你认为你知道它是如何工作的代码而不是它的实际工作原理来轻松地超越自己 :) 所以你要么需要仔细阅读语言文档以确保您确定自己编写的代码会做什么,或者在未来的调试会话中为了个人理智而避免编写过于“聪明”的代码:) KISS原则的存在是有原因的。
- 1 回答
- 0 关注
- 79 浏览
添加回答
举报