インクリメント演算子とデクリメント演算子

(1/1)

サンプル・プログラムの実行例

インクリメント演算子とデクリメント演算子
PHPにはC言語と同じインクリメント演算子とデクリメント演算子がある。これらを使うとプログラムを短くすることができるが、その位置によって効果が異なることに留意したい。

目次

インクリメント演算子とデクリメント演算子

PHPのインクリメント演算子「++」は、変数に1を加算して代入するという作用を有する。たとえば $i++$i = 4 + 1 と同じ作用となる。
デクリメント演算子「--」は、変数に1を減算して代入するというものである。
これらは、ループ・カウンタでよく使われる。

サンプル・プログラム

後置と前置

インクリメント演算子は、変数の後に書く後置 $i++ と、前に書く前置 ++$i の2種類の配置がある。デクリメント演算子も同様である。
前置と後置によって作用が異なることに留意したい。

   2: $i = 1;
   3: echo $i . '<br />';
   4: echo $i++ . '<br />';
   5: echo $i . '<br />';
   6: echo ++$i . '<br />';
   7: echo $i . '<br />';

このコードを実行すると下記のようになる。
1
1
2
3
3
つまり、後置 $i++ のときはインクリメントより先に echo が実行される。前置 ++$i のときはインクリメントが先に実行され次に echo が実行される。

ループカウンタ

インクリメント演算子/デクリメント演算子をループ条件に書くとプログラムを短くすることができるが、後置と前置の違いに注意しなければならない。

   2: $i = 0;
   3: while ($i++ <10) {
   4:     echo $i . '<br />';
   5: }
   6: echo '----<br />';
   7: $i = 0;
   8: while (++$i <10) {
   9:     echo $i . '<br />';
  10: }

このコードを実行すると下記のようになる。
1
2
3
4
5
6
7
8
9
10
11
--
1
2
3
4
5
6
7
8
9
10
後置の場合は、ループ条件式が評価された後にインクリメントされるので11まで繰り返される。
前置の場合は、ループ条件式が評価される前にインクリメントされるので10まで繰り返される。
もっと複雑なループ処理になると、後置/前置の違いがバグの原因になりかねない。
そこで、下のソースのように条件式の外でインクリメント/デクリメントすることをお勧めする。

   2: $i = 1;
   3: while ($i <11) {
   4:     echo $i . '<br />';
   5:     $i++;
   6: }
   7: echo '----<br />';
   8: $i = 1;
   9: while ($i <10) {
  10:     echo $i . '<br />';
  11:     $i++;
  12: }
  13: ?>

(この項おわり)
header