Home  >  Article  >  Backend Development  >  php的$i++,++$i的疑问

php的$i++,++$i的疑问

WBOY
WBOYOriginal
2016-06-06 20:17:181990browse

<code><?php $i=2;
switch($i++){
    case 2: 
    echo '输出2<br/>';
    echo $i;
    break;
    case 3: 
    echo '输出3<br>'.$i;
    break;
    case 1:
    echo "输出1<br>";
    break;
    default:
    break;
}
</code>

下面这两段代码迷惑:

<code><?php for($i=0;$i<3;++$i){
    $j=$i;
    echo $j.'-'.$i.'<br/>';
}
for($i=0;$i';
}
</code>

这里的i++和++i没有区别,不理解?

<code><?php $a=1;
echo $a+$a++.'<br/>';
$a=1;
echo $a+$a+$a++;
</code>

这里的输出值为什么都是3?

回复内容:

<code><?php $i=2;
switch($i++){
    case 2: 
    echo '输出2<br/>';
    echo $i;
    break;
    case 3: 
    echo '输出3<br>'.$i;
    break;
    case 1:
    echo "输出1<br>";
    break;
    default:
    break;
}
</code>

下面这两段代码迷惑:

<code><?php for($i=0;$i<3;++$i){
    $j=$i;
    echo $j.'-'.$i.'<br/>';
}
for($i=0;$i';
}
</code>

这里的i++和++i没有区别,不理解?

<code><?php $a=1;
echo $a+$a++.'<br/>';
$a=1;
echo $a+$a+$a++;
</code>

这里的输出值为什么都是3?

$a=1;
echo $a+$a++.'
';
$a=1;
echo $a+$a+$a++;

第一个echo的执行顺序如下图:
php的$i++,++$i的疑问
$a = 1;
$a++ 返回1保存到临时变量 ~1
这个时候!0(也就是$a已经自增变为2)了
~1+!0 (1+2) 保存到临时变量 ~2
输出3

第二个echo的执行顺序如下图:
php的$i++,++$i的疑问
如图所示
执行顺序是
$a = 1;
$a+$a 的结果2保存到临时变量 ~1
$a++ 返回1, 保存到临时变量 ~2
~1+~2(1+2) 保存到临时变量 ~3
输出3

对于for语句来说,你那样写结果是一样的,实际i++与++i二者的使用执行还是有区别的.如下:
比如:

<code>$n = 1;
echo $n++;        // 1        先使用
echo $n;          // 2        后执行++
echo '<hr>';
$n = 5;
echo ++$n;        // 6        先执行++ ,后使用$n的值
echo $n;          // 6
</code>

所以

<code>$a=1;
echo $a+$a++.'<br>';   // 2 + 1
$a=1;
echo $a+$a+$a++;        // (1+1)+1        </code>

简而言之,运算符优先级相同,其结合方向决定求值顺序
通常而言++优先级高,所以$a+$a++ 是先使用后者$a值,又因为是同一变量,本着从左到右结合,在使用第一个$a时值变成了2,所以结果2+1 得3
但无论是i++,还是++i(只能改变局部结合顺序),都是加法运算(优先级相同),显然加运算整体从左到右,($a+$a)+$a++,后者$a++ 不影响,后者表达式前2个$a的值.

因为第一段代码输出的是 $i。

第二段代码输出的是 $a+$a+($a++)

其实就是$a++ 和 ++$a 的区别。要实际输出他们的时候才会有区别,否则没有任何区别。

例如:
$a=1,$b=1;
$a++;
++$b;
echo '这是$a++后的结果: '.$a; // 2
echo '这是++$b后的结果:'.$b; // 2

由于输出的是经过++(自增)后的结果,所以是一样的。

若是直接输出那就不一样了:

$a=1,$b=1;
echo '这是$a++: '.$a++; // 1
echo '这是++$b:'.++$b; // 2

由于是直接输出的,所以会不同。原因是:
$a++ 先返回$a的值,然后自增。

++$b是直接返回自增后的值

建议参看 http://php.net/manual/zh/control-structures.for.php
无论是 i++ 或者 ++i 都是在本次循环结束后再运算,再进入下一次循环

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn