【问题标题】:++ operator precedence in PHP [closed]PHP中的++运算符优先级[关闭]
【发布时间】:2013-11-13 13:09:01
【问题描述】:
$i = 1;
$sum = $i + ($i++);

$i = 1;
$sum = $i + $i + ($i++);

最后会得到结果$sum = 3,谁能告诉我为什么?

这是php中的测试代码,你可以自己执行或者直接点击这个链接:Demo查看执行结果。为什么最后会得到这个结果?

这里要提一下,我很清楚$i++和++$i是做什么的。而且我问的这个问题有点不同。请看一下“结果列表”。

$sum = $i + ($i++);  //$sum = 3;

$sum = $i + $i + ($i++); //$sum = 3;

得到同样的结果!!

我知道代码应该这样写。我是从朋友那里得到的,无法解释原因,所以在这里要求解释清楚。

// Result list
// $i = 1;                              //Result
// $sum = $i + ($i++);                  //3 2   (Look at this)
// $sum = $i + $i + ($i++);             //3 2   (And this)
// $sum = $i + $i + $i + ($i++);        //4 2
// $sum = $i + $i + $i + $i + ($i++);   //5 2

// Test

$i = 1;
$sum = $i + ($i++);
echo   "Result: ", $sum, " ", $i, "<br />";

$i = 1;
$sum = $i + $i + ($i++);
echo   "Result: ", $sum, " ", $i, "<br />";

highlight_file(__FILE__);

【问题讨论】:

  • 感谢随机的一段代码。如果您能解释一下这段代码应该做什么以及确切您需要什么帮助,那就太好了。
  • 没有。甚至。事情。如果你写这样的代码,它已经坏了。
  • 我只是想知道这个结果的原因。这个结果背后的执行原理。
  • 你可以看到这里的代码消失了我的一部分。我正在尝试显示它。你可以看这里:demo.zjmainstay.cn/php/simpleAdd.php
  • Operators precedence in PHP 的可能副本

标签: php operators add


【解决方案1】:

$i++ 表示处理完$i变量后加1。

++是一个操作符,你必须把它放在你想操作的变量的前面,这样它会在处理变量之前加1。

$i = 0;
echo $i++; will echo 0;
$i = 0;
echo ++$i; will echo 1;

希望这会有所帮助。

【讨论】:

  • 技术上,++ 是一个operation,而不是一个函数;并测试你的代码,它并没有给出你所说的
  • 我正要纠正最后一个,幸好你知道我说了什么;)
  • 感谢您的回答。我知道 $i++ 和 ++$i 是做什么的。但这里有所不同。$i=1; $sum = $i + ($i++);和 $i=1;$sum = $i + $i + ($i++);有点不同,但得到相同的结果 $sum=3。
【解决方案2】:

是的,你是对的,在 5.4 中我得到了以下信息:

$sum = $i + ($i++);      //3 2  , but should be 2 2
$sum = 0 + $i + ($i++);  //2 2  , correct 
$sum = $i + $i + ($i++); //3 2  , correct

我在5.0.5下测试过,还有一个结果。

“运算符优先级和关联性指定分组,但它们不指定执行组的顺序。在最后一个示例中,($a + $a)($a++) 可以先运行。

PHP 没有指定实际会发生什么。一个版本的 PHP 可以为您提供一个结果,而不同的版本可以为您提供另一个结果。不要编写依赖于某些特定评估顺序的代码。” https://gist.github.com/nikic/6699370

【讨论】:

  • 如果这是一个错误,我想我已经得到了答案。谢谢。
  • @Zjmainstay 经过一些研究并尝试发布错误,我得到了回复。我已经更新了我的答案。
【解决方案3】:

这是包括 PHP 在内的类 C 语言的基本主题之一,称为运算符优先级。

i++在赋值之后执行,而++i在赋值之前执行。

例子:

$i = 1;
$j = 1 + $i++; // this is the same as : j = 1 + i; i += 1;
// Result: i = 2, j = 2;

$i = 1;
$j = 1 + ++$i; // this is the same as : i += 1; j = 1 + i;
// Result: i = 2, j = 3;

Proof.

【讨论】:

  • 谢谢,但是为什么不比较一下 "$i+($i++)" 和 "$i+$i+($i++)" 的区别;
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 2016-05-06
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 2013-07-27
  • 1970-01-01
相关资源
最近更新 更多