PHP中$i++和++$i是否存在性能差异?
PHP for循环中
$i++和++$i的性能差异说明与验证方案 性能差异结论
- 日常业务开发完全不用纠结二者的差异:PHP7及以上版本开启OPcache后,两种写法的底层执行逻辑完全一致,没有任何可感知的性能差别。
- 只有在非常老的PHP5版本且关闭优化的场景下,
++$i才会有微乎其微的速度优势:因为后置自增$i++需要先暂存原始值再返回,多了一步无意义的操作,但这个差异只有循环千万次以上才能测出来,正常业务根本碰不到这种场景。
性能验证方法
你不需要去找编译文件,直接写简单的基准测试代码就能直观看到耗时差别,参考代码如下:
<?php // 测试$i++耗时 $start = microtime(true); $loopTimes = 10000000; for ($i = 0; $i < $loopTimes; $i++) { // 加一行简单操作避免空循环被PHP优化掉,导致测试不准 $tmp = $i; } echo '$i++ 耗时:' . number_format(microtime(true) - $start, 4) . '秒' . PHP_EOL; // 测试++$i耗时 $start = microtime(true); for ($i = 0; $i < $loopTimes; ++$i) { $tmp = $i; } echo '++$i 耗时:' . number_format(microtime(true) - $start, 4) . '秒' . PHP_EOL;
测试的时候注意几个点,结果会更准确:
- 用和生产环境一样的PHP版本、OPcache配置测试
- 循环次数建议设为1000万次以上,否则差异太小体现不出来
- 多跑几次取平均,避免服务器其他进程占用资源导致结果波动
如果确实想看底层执行的指令差异,可以装vld扩展,打印两段代码生成的opcode直接对比即可。
内容的提问来源于stack exchange,提问作者Akkua
相关产品推荐
相关产品推荐

