【PHP】++$varと$var++の違い
結論
インクリメント・デクリメントされるタイミングが異なる。
説明
演算子 | 名称 | 返り値 |
---|---|---|
$var++ | 後置インクリメント | $var |
++$var | 前置インクリメント | $var + 1 |
$var-- | 後置デクリメント | $var |
--$var | 前置デクリメント | $var - 1 |
参考:プログラミングPHP(O'REILLY)
- 後置インクリメント(デクリメント)は、インクリメント(デクリメント)する前に元の値を返す。
- 前置インクリメント(デクリメント)は、インクリメント(デクリメント)した後で新しい値を返す。
文字よりコードを見た方が分かりやすいです。
後置インクリメント
<?php $var = 1; echo '$var++は、' . $var++; #インクリメントする前に元の$var = 1を返す echo '$varは、' . $var; #インクリメントした後の新しい値を返す #$var++は、1 #$varは、2
前置インクリメント
<?php $var = 1; echo '++$varは、' . ++$var; #インクリメントした後の$var = 2を返す echo '$varは、' . $var; #既にインクリメントされているので$var = 2 #++$varは、2 #$varは、2
ベンチマーク
PHP 5.5.6 前置インクリメント(デクリメント)の方が最大3.8%ほど速かったが、誤差の範囲内ではなかろうか。 (++$iを2回行っているのは、初めの++$iが何故かかなり遅くなるため)
<?php require_once('Benchmark/Timer.php'); function before_inc($num) { for($i = 0; $i < $num; ++$i) { } } function after_inc($num) { for($i = 0; $i < $num; $i++) { } } function before_dec($num) { for($i = $num; $i > 0; --$i) { } } function after_dec($num) { for($i = $num; $i > 0; $i--) { } } $num = 10000; echo $num . "\n"; $timer = new Benchmark_Timer(); $timer->start(); before_inc($num); $timer->setMarker('++$i_1'); before_inc($num); $timer->setMarker('++$i_2'); after_inc($num); $timer->setMarker('$i++'); before_dec($num); $timer->setMarker('--$i'); after_dec($num); $timer->setMarker('$i--'); $timer->stop(); $timer->display();
参考
- 作者: Rasmus Lerdorf,Kevin Tatroe,Peter MacIntyre,高木正弘
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/10/23
- メディア: 大型本
- 購入: 16人 クリック: 329回
- この商品を含むブログ (50件) を見る