【问题标题】:Php post/pre increment/decrement, precedence [duplicate]PHP post/pre 递增/递减,优先级
【发布时间】:2013-06-18 17:23:13
【问题描述】:

据我所知,预增量是在所有其他操作之前计算的,后增量是在所有操作之后计算的。

在 php 文档中,据说增量(我完全理解为预增量)具有非常高的优先级。后增量应该具有非常低的优先级,实际上是最低的优先级。

+ 运算符的优先级比++ 低得多(根据文档)。

所以,现在的问题是:在 php 文档中有一个示例,表明一个表达式中的前置增量和后置增量可以变化:

// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5

为什么?怎么回事?我看到以下情况,很清楚:

  1. 预增量 $a
  2. 计算 $a 和 $a 的总和
  3. 后增量 $a

我不明白为什么它是不可预测的。 可以在此处找到有关此主题(以及此示例)的 PHP 文档: http://www.php.net/manual/en/language.operators.precedence.php

【问题讨论】:

  • 投票重新开放。该手册讨论了一个具体现象(未定义的行为),并且 OP 询问为什么会这样,尽管所有优先级都应该很清楚。不知道这个问题有什么问题。
  • Precedence 指的是操作符是如何分组的,也就是说,如果你必须明确地使用它们(如在 Lisp 中),它说明所有括号的位置。但它没有指定操作发生的总顺序,这在涉及副作用时很重要。
  • 例如:在f1()*f2()+f3() 中,优先级表示乘法在加法之前完成。但这并不意味着f1 必须在f3 之前调用。
  • @andrewsi、Eric Leschinski、Baba、ircmaxell、Hamza:为什么没有建设性?这是关于 php 官方文档中非常奇怪的示例的具体问题。别傻了,伙计们!

标签: php operator-precedence


【解决方案1】:

它总是会产生4,因为最后一个$a使用Post-increment来产生5,然后像第一个$a一样使用Pre-increment

$a = 1;
echo ++ $a +  $a++; // 4

还有

$a = 1;
echo ++ $a + ++ $a; //  5

Incrementing/Decrementing Operators

【讨论】:

  • 我完全同意你的看法。但我的问题是关于文档。我不能在 php 文档中举例 :( 这是无效的。
猜你喜欢
  • 1970-01-01
  • 2017-07-18
  • 2013-06-18
  • 2011-04-17
  • 2019-12-06
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多