“php” カテゴリのアーカイブ

見慣れないforの条件を見かけたので、実験してみた。$i++ と ++$i に、そんな使い分けるほどの差があるのかどうか。

$ php -v
PHP 5.4.36 (cli) (built: Jan  2 2015 09:31:47)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.6, Copyright (c) 2002-2014, by Derick Rethans
<?php
$tmp = 1;
// Post-increment
$time_start = microtime(true);
for ($i=0; $i<100000; $i++) {
    $tmp = 1;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo $time . "秒" . PHP_EOL;
 
// Pre-increment
$time_start = microtime(true);
for ($i=0; $i<100000; ++$i) {
    $tmp = 1;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo $time . "秒" . PHP_EOL;

↑を実行した結果

0.0064029693603516秒
0.0063819885253906秒

10万回のループで、たった0.00002秒の差。個人的には、たったこれだけの差なら、わざわざ ++$i なんて使いたくない。返却値に細心の注意(++$iでインクリメント後の値か、$i++でインクリメント前の値かの注意)が必要となるのに、++$iを、forの条件で書かれたら、「何か$i++とは違う挙動をさせたいような特別意図があるのか?」と、ドキっとするじゃないか…。読み手のストレスが増えるデメリットに対して、得られるスピードのメリットは大きくなさそうだ。

【追記】
もっと驚きの結果が出た。上記の結果は、手元の iMac(Late 2015 3.3GHz 16GB) なのだが、どこぞのクラウドの 1CPU メモリ1GB の CentOS7 の PHP7 で同じコードを実行したところ、以下の結果だった。これは、先ほどの結果より、2倍程度遅く、0.007秒ほど遅い。ただでさえPHP7は爆速になったと言われているが、本当に速度を改善したいのなら、マシン自体の構成をまず検討するべきという結果ではなかろうか。

0.013155937194824秒
0.013364791870117秒

Comments $i++ と ++$i の速度の違いについて実験した はコメントを受け付けていません。