php的$i++,++$i的疑问
高洛峰
高洛峰 2017-04-10 16:52:20
[PHP讨论组]
';
    echo $i;
    break;
    case 3: 
    echo '输出3
'.$i; break; case 1: echo "输出1
"; break; default: break; }

下面这两段代码迷惑:

';
}
for($i=0;$i<3;$i++){
    $j=$i;
    echo $j.'-'.$i.'
'; }

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

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

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
黄舟

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

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

所以

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

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

ringa_lee

因为第一段代码输出的是 $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是直接返回自增后的值

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号