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

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

目次

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

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

サンプル・プログラム

後置と前置

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

0002: $i = 1;
0003: echo $i . '<br />';
0004: echo $i++ . '<br />';
0005: echo $i . '<br />';
0006: echo ++$i . '<br />';
0007: echo $i . '<br />';

このコードを実行すると下記のようになる。

1
1
2
3
3


つまり、後置 $i++ のときはインクリメントより先に echo が実行される。前置 ++$i のときはインクリメントが先に実行され次に echo が実行される。

ループカウンタ

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

0002: $i = 0;
0003: while ($i++ <= 10) {
0004:     echo $i . '<br />';
0005: }
0006: echo '----<br />';
0007: $i = 0;
0008: while (++$i <= 10) {
0009:     echo $i . '<br />';
0010: }

このコードを実行すると下記のようになる。

1
2
3
4
5
6
7
8
9
10
11
--
1
2
3
4
5
6
7
8
9
10


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

0002: $i = 1;
0003: while ($i <= 11) {
0004:     echo $i . '<br />';
0005:     $i++;
0006: }
0007: echo '----<br />';
0008: $i = 1;
0009: while ($i <= 10) {
0010:     echo $i . '<br />';
0011:     $i++;
0012: }
0013: ?>

(この項おわり)
header