第3章 条件分岐文を詳しく知って扱おう
3.1 条件分岐文について
条件分岐文はプログラムの流れを変えるための制御文の1つです。条件分岐を行わないプログラムは、ほぼないと言っても過言ではありません。条件分岐文をうまく利用してプログラムを組むことがPHP言語では重要になります。
3.1.1 条件分岐の種類
条件分岐文には、条件に応じてプログラムの流れを変えたい時に使用する「if文」、もう1つは、ある変数の値に応じてプログラムの流れを変えたい時に使用する「switch文(スイッチ)」の2種類があります。
if文には条件に応じてif-else文、if-elseif-else文と言ったパターンがあります。他には条件文の中に条件分岐処理を記述した「if文のネスト(入れ子)」など、様々な条件に応じた使い方ができるのが特徴になります。
- if文
- if-else文
- if-elseif-else文
- if、elseif、elseブロック内にif文がある。(if文のネスト)
if文のネストについては次項で学習していきます。また、PHP入門で学習したif文についてのまとめを以下に示します。
switch文はif文と違い、使い方のバリエーションはありません。またswitch文で記述できる内容はif文でも記述することができますが、条件が多くなる場合にはswitch文を利用することで簡潔に記述できます。switch文については3.2節で詳しく紹介していきます。
3.1.2 if文のネストを使ってみよう
if文のネストは条件分岐文の各ブロック内で、さらに条件分岐を記述したものを指します。
書式:if文のネスト
上記の書式ではifブロック内にif文のみの条件文を記述しただけですが、当然elseifブロック内でも、elseブロック内にも記述することができます。またネストしたif文もif-elseif-elseと条件に応じたパターンで記述できます。
書式の処理の流れをフローチャートで表すと以下の図3.1.1になります。
図 3.1.1 :ネストした条件分岐文のフローチャート
if文のネストを行うと条件分岐した中でさらに条件分岐させることができます。しかし、ネストし過ぎるとソースコードが読み難くなってしまいます。判定する条件によっては、論理演算子を使って行えば簡潔に記述することもできます。そのため、ネストしなければならない条件分岐なのかは、判定する条件をしっかりと考えてから行うようにしましょう。
では実際にif文のネストを利用したプログラムを確認していきましょう。
if文のネストを利用して条件に応じた処理を行うプログラム
フォーム画面から入力してもらった点数を別画面で受け取り、その点数の判定結果に応じたメッセージの出力を確認します。
ソース・フォルダー: myproj_basic/ch03
パッケージ: nestForm.php
アクセスURL:http://localhost/myproj_basic/ch03/nestForm.php
nestForm.php
ソース・フォルダー: myproj_basic/ch03
パッケージ: useIfNest.php
アクセスURL:nestForm.phpからの画面遷移でアクセスされる
useIfNest.php
今回のプログラムは「nestForm.php」からの入力データ(点数)を「useIfNest.php」で受け取り、その点数を条件分岐文で判定しその点数に応じたメッセージを画面に出力させます。
まずは2行目で画面からの入力データを$_POSTを使って取得し、変数$scoreに代入します。
5~7行目の処理で入力点数が有効範囲の値なのかをチェックしています。この場合は「$scoreが-1以下、または101以上」の場合にtrueになりifブロックの処理を行います。
入力数値が0~100ならば8~21行目のelseブロックの処理を行います。このelseブロック内でif文のネストが行われている所がポイントになります。
9行目のチェックでは点数が80以上か確認しています。もしも80未満なら18~20行目のelseブロックの処理を行います。80以上なら10~17行のifブロックの処理を行います。
10行目でさらに点数のチェックを行い、点数が100なら11行の処理を行い、そうでなければ14行の処理を行います。10~15行の間の共通処理として、16行目で「.=」で文字列の結合を行います。
実行結果から分かるようにネストしたif文を使うと、複数の条件でメッセージを変化させることが確認できます。
ポイント
- 条件分岐文の各ブロック内でさらに条件分岐文を書く事ができる。