これまでの例は、条件が真のときのみ実行するというものでした。もしこの書き方しかないとすると、真のときと偽のときで別々の処理をしたい場合に、次のように書かねばなりません。
if($foo == 123) { print("fooの値は123です"); } if($foo != 123) { print("fooの値は123ではありません"); }
これだと比較を2回行っていて冗長ですし、1個目と2個目のif文が密接につながっているものだということが、ぱっと見てすぐには分かりません。そこで、条件が真ではなかった場合に実行するための文法があります。それが、「else」です。例えば、下記のようになります。
<?php $foo = 123; if($foo == 123) { print("fooの値は123です<br>"); } else { print("fooの値は123ではありません<br>"); } print("処理終了!");
このままだと、実行結果はリスト1と同じですが、$fooの値を123以外に変更して実行してみてください。その場合、下記のように表示され、条件が偽の場合も実行されているのが確認できるでしょう。
fooの値は123ではありません 処理終了!
さて、次の例として、正の数か負の数か、あるいは0かの3種類に場合分けする例を考えてみます。if文は「ネスト」(入れ子)にできるので、次のように書くことができます。
<?php $foo = rand(-10, 10); if($foo == 0) { print("fooの値は0です<br>"); } else { if($foo > 0) { print("fooは正の数です<br>"); } else { print("fooは負の数です<br>"); } } print("fooの値は{$foo}でした");
2行目のrand()は初めて登場する命令ですが、これは乱数を発生させるものです。乱数は、名前の通り、不規則かつ等確率に現れる数字のことです。簡単にいうと、次に何が出るか分からない数字のことです。( )内に2個数字が並んでいますが、これで乱数の範囲を指定します。
下記のようにすることで、-10〜10の範囲の乱数を発生させます。これを変数$fooに代入しています。
rand(-10, 10)
リスト4は乱数を使用していますので、実行のたびに結果が変わり、以下の3パターンになります。
fooは正の数です fooの値は10でした
fooは負の数です fooの値は-6でした
fooの値は0です fooの値は0でした
さて、リスト4のソースコードですが、外側のif文で0かそれ以外かを判定し、さらに0以外のとき(7〜10行目)に「0より大きいかそうでないか」を判定しています。最後に残るのが負のケースなのは明らかなので、比較はしていません。
このネストを使った書き方でも問題はないのですが、例のような並列な条件の場合、「elseif」を使って次のように書いた方が見やすいでしょう。
<?php $foo = rand(-10, 10); if($foo == 0) { print("fooの値は0です<br>"); } elseif($foo > 0) { print("fooは正の数です<br>"); } else { print("fooは負の数です<br>"); } print("fooの値は{$foo}でした");
実行結果はリスト4と同じです。
インデントもそろって、並列な条件分岐であることが見た目にもすぐ分かります。なお、「elseif」とつながっており「else if」ではありません。elseifは幾つでも使えますが、elseより前になければいけません。
動作をまとめると、まずif文の条件が最初に評価され、真であれば続く波かっこの中身が実行されます。偽でありなおかつelseifがあればその条件が評価され、真であれば実行、偽であれば次のelseif(もしあれば)の条件を評価する、ということを繰り返します。最後に、ifと全てのelseifが偽のとき、elseがあればそれを実行します。
if文で実行する文が1文の場合、波かっこを省略できます。リスト5は次のようにも書けます。
if($foo == 0) print("fooの値は0です<br>"); elseif($foo > 0) print("fooは正の数です<br>"); else print("fooは負の数です<br>");
しかし、後から文を追加するときに面倒ですし、省略したところでメリットはありません。常に波かっこを入れるようにしましょう。コードを読むとき、こういう書き方に出くわしたときのための知識です。
ところで、本文中では「else if」ではなく「elseif」であると書きましたが、実際にはどちらでも動作します。「else if」はelseにおいて波かっこを省略したケースになるためです。分かりやすくインデントすると、次のように解釈されるということです。
if($foo == 0) { print("fooの値は0です<br>"); } else if ($foo > 0) { print("fooは正の数です<br>"); } else { print("fooは負の数です<br>"); }
「else if」と「elseif」、実際にはどちらも使われていますが、PHP標準は「elseif」です。これもコードを読むときの知識として覚えておく程度でいいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.