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

前端之家收集整理的这篇文章主要介绍了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以便以任何顺序添加以便优化速度和/或存储器.看完C code example in this article后我得出结论.

我的问题是,无论表达式和子表达式的评估方式如何,上述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: Pre-increment — Increments $a by one,@H_301_22@then returns $a.
$a++: Post-increment — Returns $a,@H_301_22@then increments $a by one.

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的值.

原文链接:https://www.f2er.com/php/136900.html

猜你在找的PHP相关文章