プログラミングは条件分岐を行いながら組み立てるものです。
例えば、
- Aボタンを押したらこの処理。
- チェックに入力があればこの処理。
- 入力された年齢が18以上ならこの処理。
こういった条件分岐を行う上で必要になってくるのが、if や for などの構文です。
これでにより、条件で処理を分けたり、同じ処理を指定した回数ループしたり出来ます。
PHPに限らずJavaやRuby、JavaScriptにも同じような分岐はあります。
if文による条件分岐
if文は条件を分岐するための構文です。
実際にコーディングするときにもかなり使います。
1 2 3 4 |
$age = 20; if ($age >= 20) { echo '成人です。'; } |
上の例は、$age(年齢)が20以上だったら「成人です。」というメッセージを表示するコードです。
1行目の $age = 20; は直接20という数値を代入していますが、画面で入力した値をセットしたりDBから取得した値をセットして使います。
if は「~だったら」という条件分岐ですが、「~だったら。そうでなかったら」の「そうでなかったら」の部分も書くことが出来ます。
1 2 3 4 5 6 |
$age = 20; if ($age >= 20) { echo '成人です。'; } else { echo '成人ではありません。'; } |
このように else を使うことで、条件に当てはまらなかった場合の処理を記述出来ます。
例では、20以上でなかったら「成人ではありません。」というメッセージを表示するコードです。
そして、else if という分岐もあり、これは「Aだったら。Aで無くBだったら。AでもBでもなかったら」の「Aで無くBだったら。」の部分を書くことが出来ます。
1 2 3 4 5 6 7 8 |
$age = 18; if ($age >= 20) { echo '成人です。'; } else if ($age >= 18) { echo '成人ではありませんが、車の免許はとれます。'; } else { echo '成人ではありません。'; } |
このように書くことで、「成人では無いが、18歳以上なら」という条件分岐が出来ます。
for文による処理のループ
for文はループ処理に使います。
次にwhile文を紹介しますが、僕はfor文のほうが好きです。
例えば下のコードだと、$i が 0 から 19 (20未満)になるまでループします。
1 2 3 4 |
$age = 20; for ($i = 0; $i < $age; $i++) { echo $i; } |
と記載します。
初期化は、ループをカウントする変数を定義するのが一般的です。
ここで定義した変数はその for 文内でしか使えません。
条件は、どこまでループするのかを定義します。
この条件が満たされればループは終了します。逆に満たされなければ無限にループし続けます。
変化は、1回ループが完了する毎に実行されます。
for文には continue と break というものがあります。
continue
continueは、ループ内の処理を、そのループに限り終了させ、変化; を実行した後次のループ処理にはいります。
1 2 3 4 5 6 7 |
$age = 20; for ($i = 0; $i < $age; $i++) { if ($i == 5) { continue; } echo $i; } |
上の例だと、i が 5 のときだけ i の値を表示せず、ループを続行することになります。
break
breakは、そのループ自体を終了し、次の処理に移ります。
1 2 3 4 5 6 7 |
$age = 20; for ($i = 0; $i < $age; $i++) { if ($i == 5) { break; } echo $i; } |
上の例だと、i が 5 になったときにループを終了します。
結果は、0, 1, 2, 3, 4 を出力し、5のときに break して$iの値を出力せず、6以降は処理しません。
例えばチームメンバーのリストの中からリーダーを探す処理をしたとき、メンバーを全てループしつつ、役職がリーダーだったらbreak で終了するような感じで使います。
while文による処理のループ
先ほど説明した for 文と同様にループ処理を行うための構文です。
どちらが軽いとかあまり意識しないで大丈夫です。
大昔はかなり意識してたみたいですが、最近はサーバーの性能も良いのであまり軽さは求められないです。もちろん軽いプログラムのほうが良いですが。
上の for 文と同様のことを while 文で書くと下のコードのようになります。
1 2 3 4 5 6 |
$age = 20; $i = 0; while ($i < $age) { echo $i; $i++; } |
while 文には do while という書き方もあり、上の例と同じようなものは下のコードのように書きます。
1 2 3 4 5 6 |
$age = 20; $i = 0; do { echo $i; $i++; } while ($i < 10); |
何が違うのかと言うと、先に1度ループ内の処理をして、条件を満たしていれば次のループもするところです。
上のほうのコードの場合は、age が 0 の場合は1度もループ内処理をすることはありません。
while文にも continue と break があります。
continue と break の動きは for 文のときと同じです。
switch文による条件分岐
switdh文はif文のように値によって条件分岐できる構文です。
僕はあまり使いませんが。
1 2 3 4 5 6 7 8 9 10 11 |
$age = 20; switch ($age) { case 20: echo '成人しました。'; case 18: echo '車の免許がとれるようになりました。'; break; default: echo 'その他'; break; } |
上のコードのように case で指定した変数内の値が何かを指定し、一致すればその後の処理が行われます。
default は、どの case にも当てはまらなかった場合に実行されます。
上の例をご覧頂くと case 20: の中には break がありません。
case 18: の中には break があります。
これは例えば age の値が20だった場合には、case 20 を実行した後 case 18 も実行することになります。
このように break を処理するまで、次の条件の処理も行うところが if 文との違いかと思います。
しかし、実際の現場ではあまり使われません。
バグが出やすいからだと思います。
僕が昔携わっていた300人規模のプロジェクトでは switch 文はコーディングルールで禁止でした。
まとめ
基本的には条件分岐とループがあることが分かればよいです。
書き方はG先生に聞けばたくさんサンプルが出てきます。
while文はまだ使うとしても switdh文はほぼ見かけません。
ifとforを知っていれば問題なくプログラミングは出来ます。
コメントを残す