php – echo $a $a的输出应该是什么

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – echo $a $a的输出应该是什么脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Why is $a + ++$a == 2?13个
PHP手册 operator precedence section中,有这个例子:
// mixing ++ and + PRoduces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5

我理解行为是未定义的,原因如下:

由于x y = y x,解释器可以自由地评估x和y以便以任何顺序添加以便优化速度和/或存储器.看完@L_404_2@后我得出结论.

我的问题是,无论表达式和子表达式的评估方式如何,上述PHP代码输出应为4:

> op1 = $a => $a = 2,op1 = 2; op2 = $a => op2 = 2,$a = 3; 2 2 = 4
> op1 = $a => op1 = 1,$a = 2; op2 = $a => op2 = 3,$a = 3; 1 3 = 4

5来自哪里?或者应该更多地了解操作符的运作方式?

编辑:

我一直盯着Incrementing/Decrementing Operators部分,但仍然无法弄清楚为什么5.

a = 1;
++ (preincrement) gives a = 2 (higher precedence than +,and LR higher precedence than postincrement)
++ (postincrement) gives a = 3 (higher precedence than +)
+ (add) gives 2 + 3 = 5

$a最初设置为1. $a然后在公式中使用它之前预先增加$a,将其设置为2,并将该值推送到词法分析器堆栈.然后执行$,因为incrementor的优先级高于,并且该值也被推送到词法分析器堆栈;然后进行的添加将词法分析器堆栈的2结果添加到词法分析器堆栈3的结果,得到5的结果,然后回显.一旦执行该行,$a的值为3.

要么

a = 1;
++ (preincrement) gives a = 2 (higher precedence than +,and LR higher precedence than postincrement)
+ (add) gives 2 + 2 = 4 (the value that is echoed)
++ (postincrement) gives a = 3 (incremented __after__ the VARiable is echoed)

$a最初设置为1.当公式解析时,$a preincrements $a,在公式中使用它之前将其设置为2(将结果推送到词法分析器堆栈).然后将词法分析器堆栈的结果和$a的当前值相加,得到4;并且这个值得到了回应.最后,$a是后增量的,在$a中留下3的值.

脚本宝典总结

以上是脚本宝典为你收集整理的php – echo $a $a的输出应该是什么全部内容,希望文章能够帮你解决php – echo $a $a的输出应该是什么所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。