PHP には C言語と同じインクリメント演算子とデクリメント演算子がある。これらを使うとプログラムを短くすることができるが、その位置によって効果が異なることに留意したい。
インクリメント演算子とデクリメント演算子
PHP のインクリメント演算子「++」は、変数に 1 を加算して代入するという作用を有する。たとえば $i++ は $i = 4 + 1 と同じ作用となる。
デクリメント演算子「--」は、変数に 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 />';
このコードを実行すると下記のようになる。
つまり、後置 $i++ のときはインクリメントより先に echo が実行される。前置 ++$i のときはインクリメントが先に実行され次に echo が実行される。
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: }
このコードを実行すると下記のようになる。
後置の場合は、ループ条件式が評価された後にインクリメントされるので 11 まで繰り返される。
前置の場合は、ループ条件式が評価される前にインクリメントされるので 10 まで繰り返される。
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: ?>
(この項おわり)