Heim  >  Artikel  >  Backend-Entwicklung  >  i++的问题

i++的问题

WBOY
WBOYOriginal
2016-06-23 14:04:16877Durchsuche

int I = 3;
I = I + I++ + ++I;
以上代码在Java/C#/JavaScript中均输出11,但在PHP中却输出12,PHP的计算和替他三种有什么不同?百思不得其解,求指点!


回复讨论(解决方案)

按照PHP就变成

3+4+5了~

++i 的用法(以 a=++i ,i=2 为例)
先将 i 值加 1 (也就是 i=i+1 ),然后赋给变量 a (也就是 a=i ),
则最终 a 值等于 3 , i 值等于 3 。
所以 a=++i 相当于 i=i+1 ,a=i 

i++ 的用法(以 a=i++ ,i=2 为例)
先将 i 值赋给变量 a (也就是 a=i ),然后 i 值加 1 (也就是 i=i+1 ),
则最终 a 值等于 2 ,i 值等于 3 。
所以 a=i++ 相当于 a=i , i=i+1 

按照PHP就变成

3+4+5了~


不是诶。我试了一下
  $i=3;
  $j=3;
  $k=3;
  $i=$i + $i++ + ++$i;
  $j=$j++  + ++$j + $j;
  $k=++$k + $k++ + $k;
  echo $i;
  echo $j;
  echo $k;
分别输出12 13 13

$i = 3;$a = $i + $i++ + ++$i;echo $a; //12
这是 php 的一个 BUG
似乎所有的 php5 都有这个问题(至少我手边的3个版本是这样)
问题出在第一个 $i 传值方式上,如写作
$i = 3;$a = ($d=$i) + $i++ + ++$i;echo $a; //11
就正确了
显然第一个 $i 传递的是引用,由于后边的 $i++ 实际参与运算的是 4,而不是 3

把  + ++$i 去掉就更清晰了

这样的话,会导致因为版本问题而造成不必要的错误。唉...

这样的话,会导致因为版本问题而造成不必要的错误。唉... 那倒也不是,既然php5的各个版本都是这样,也就无关紧要了。况且那样的代码也并无实际意义
真有需要时,就把 $i + $i++ 写作 2 * $i++ 也就是了

引用 5 楼 happypiggy2010 的回复:这样的话,会导致因为版本问题而造成不必要的错误。唉...那倒也不是,既然php5的各个版本都是这样,也就无关紧要了。况且那样的代码也并无实际意义
真有需要时,就把 $i + $i++ 写作 2 * $i++ 也就是了 好像搞清楚了,PHP计算表达式中,同一个变量如果出现过多次,它的值由第二个参与计算的变量决定

$i = 3;$a = $i + ($i + ($i+$i++));echo $i,'#',$a;//4#15,a=4+(4+(4+3))

$i = 3;$a = $i + $i + ($i+$i++);echo $i,'#',$a;//4#14,a=3+3+(4+4))

引用 5 楼 happypiggy2010 的回复:这样的话,会导致因为版本问题而造成不必要的错误。唉...那倒也不是,既然php5的各个版本都是这样,也就无关紧要了。况且那样的代码也并无实际意义
真有需要时,就把 $i + $i++ 写作 2 * $i++ 也就是了

$i = 3;$a = $i + $i++ + ($i+ ++$i);echo $i,'#',$a;//5#17,a=4+3+(5+5))

太高深,大牛!

太高深,大牛!

我来搅一下局,嘿嘿

$i=3;$a = ++$i - ($i + $i++); echo $a, ',', $i;//-5,5$i=3;$a = $i++ - (++$i + $i); echo $a, ',', $i;//-7,5$i=3;$a = ++$i - ($i + ++$i);echo $a, ',', $i; // -6,5

按照PHP就变成

3+4+5了~ Java中是3+3+5,PHP中是4+3+5

引用 1 楼 baoying34 的回复:按照PHP就变成

3+4+5了~


不是诶。我试了一下
  $i=3;
  $j=3;
  $k=3;
  $i=$i + $i++ + ++$i;
  $j=$j++  + ++$j + $j;
  $k=++$k + $k++ + $k;
  echo $i;
  echo $j;…… Java中是3+3+5,PHP中是4+3+5

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn