26
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP】++$varと$var++の違い

Last updated at Posted at 2014-01-25

##結論

インクリメントされるタイミングが異なる。

##説明

演算子 名称 返り値
$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が何故かかなり遅くなるため)

SS 2014-01-25 16.00.10.png

<?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();

##参考
プログラミングPHP 第2版

前置インクリメントと後置インクリメントの違い

PHPパフォーマンスベンチマーク 後置加算・後置減算(++, --)より前置加算・前置減算(++, --)が高速

26
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?