加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:18:33 所属栏目:PHP教程 来源:网络整理
导读:参见英文答案 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,解释器可
参见英文答案 > 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,then returns $a.
$a++: Post-increment — Returns $a,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的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读