在 PHP 手册,运算符优先级部分,有这个例子:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
我了解该行为未定义,原因如下:
因为解释器可以自由地以任何顺序x + y = y + x
评估x
和添加,以优化速度和/或内存。在查看本文中的 C 代码示例y
后,我得出了这一结论。
4
我的问题是,无论表达式和子表达式的评估方式如何,上述 PHP 代码的输出都应该是:
- 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从哪里来?或者我应该更多地了解操作员的工作方式?
编辑:
我一直盯着递增/递减运算符部分,但仍然无法弄清楚为什么 5。
++$a: Pre-increment -- 将 $a 加一,然后返回 $a。
$a++: 后增量——返回 $a,然后将$a 加一。