【问题标题】:PHP inconsistency in logic operationsPHP逻辑操作不一致
【发布时间】:2020-03-03 02:33:40
【问题描述】:
$a = 0;
if($a == ++$a) // Evaluates to true
if($a > $a++) // Evaluates to true

c 中运行的相同代码的计算结果为 false。

这怎么可能?

【问题讨论】:

  • php.net/manual/en/language.operators.precedence.php 可能会有所帮助。 ++== 具有更高的优先级,但您也在比较两边的相同变量。这可能会导致意想不到的结果。
  • ++$a 将 $a 的值加一,然后将新值“返回”到表达式的该位置。 $a == ++$a – 所以++$a 将其设为 1,然后将其与 $a 的 当前 值进行比较,此时该值 已为 1。 $a++ 反过来工作 - $a 的当前值返回到表达式中,只有在那之后 $a 才会增加 - 所以对于第二个,你实际上有 1 > 0 这里。
  • @04FS 我会把它作为答案^^ :)
  • 在比较检查中,您永远不应该相信这些操作。这取决于语言实现。
  • 为什么这个问题被如此糟糕地投票 - 它实际上很有趣,或者我认为。第一个 if 条件有意义(true1==1),但我仍然无法理解第二个 if 条件返回 true...

标签: php increment logical-operators


【解决方案1】:

++$a$a 的值加一,然后将新值“返回”到表达式的该位置。
$a == ++$a - 所以++$a 变为1,然后然后将其与$a当前 值进行比较,此时 已经是1

$a++ 反过来工作 - $a 的当前值返回到表达式中,只有在那之后 $a 才会增加 - 所以对于第二个,你实际上有 1 > 0 在这里。
(使用$a > ++$a 而不是$a 将首先递增,因此实际上是1 > 1,导致false。)

【讨论】:

  • 嗯...所以...,当我们退出第一个if条件此时$a是1,然后进入第二个@987654337 @条件我们如何有效地拥有1 > 0?不应该_有效地“读取”1 > 1++$a 最终(后递增)到2
  • @jibsteroos 我正在回答 $a 在两者之间重置为 0 的情况 :-) 但如果不是,那么整个事情就会第二次“移动”1,如果,是的- 你从 1 开始,然后 $a++ 得到 post-递增到 2,所以有效条件最终是 2 > 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2017-08-12
相关资源
最近更新 更多