それでは、条件分岐をやっていきましょう。
ここから、少しプログラミングっぽくなってきます。
まずは…
例えば、飲酒に関することで、「あなたの年齢は20歳以上ですか?」という質問があったとします。
20歳以上であれば飲酒は可能です。
20歳未満であれば、法律で飲酒は認められていません。
条件分岐の基本は、
- 条件(「あなたの年齢は20歳以上ですか?」)
- 正しい場合の処理(「20歳以上のときの処理」)
- 違うときの処理(「20歳未満のときの処理」)
それでは簡単なプログラムを作ってみましょう。
条件分岐はif
という文法を使用します。
英語では「もし〜であれば、」という意味ですね。
<?php $age = 22; if ($age >= 20) { echo "お酒が飲めるぞ!"; } else { echo "お酒は二十歳になってから!"; } ?>
これを表示させてみましょう。
「お酒が飲めるぞ!」と表示できたと思います。
今度は、$age = 22;
の部分を変えてみましょう。
$age = 18;
上書き保存して再度アクセスしてみるとどうでしょうか?
「お酒は二十歳になってから!」と表示されたのではないでしょうか?
条件分岐の基本
それではソースコードを1行ずつ確認していきましょう。
// $ageという変数に22という数値を代入している $age = 22;
まずは年齢を定義する$age
という変数を用意し、そこにテストしたい年齢の数値を入れます。
ここからが本題です。
if
文の基本文法をまとめると下記のようになります。
if (条件) { 正しいときの処理 } else { 違うときの処理 }
if
の後の()
内が条件です。
if ($age >= 20) {
>=
は比較演算子と呼ばれます。
比較演算子にもいくつか種類があるので、後ほど記載します。
>=
は「 以上 」になります。
つまり、$age
が20以上であれば、という条件となります。
その後を見ていきましょう。
if ($age >= 20) { // 正しいときの処理 echo "お酒が飲めるぞ!"; } else { // 違うときの処理 echo "お酒は二十歳になってから!"; }
$age
の中に入っている数値が20以上であれば、「お酒が飲めるぞ!」と出力します。
逆に20未満であれば、「お酒は二十歳になってから!」と出力されます。
このように、$age
の値によって処理を変えることを条件分岐といいます。
今回の例題をまとめると、下記になります。
- 条件…
$age >= 20
- 正のときの処理…
echo "お酒が飲めるぞ!";
- 違うときの処理…
echo "お酒は二十歳になってから!";
ちなみに、正しいときの処理さえ記載していれば、違うときの処理は書かなくても問題ありません。
// 20歳以上のときは出力するが、20歳未満のときは何もしない。 if ($age >= 20) { // 正しいときの処理 echo "お酒が飲めるぞ!"; }
比較演算子
先ほどでてきた>=
は、比較演算子と呼ばれます。
これは、左と右の値を比較して、正しいか正しくないかを判断します。
使用例 | 意味 |
---|---|
A == B | AとBは等しい場合 |
A != B | AとBが等しくない場合 |
A > B | BがA未満の場合 |
A >= B | AがB以上の場合 |
A < B | AがB未満の場合 |
A <= B | AがB以下の場合 |
論理値の条件分岐
よく フラグ という言葉をきくと思います。
これは、ある条件が正しいかどうかを指します。
例えば、学生かどうかを判定するプログラムがあったとしましょう。
// 学生かどうか $is_student = true;
こういうとき、変数の中には論理値を入れます。
論理値は変数とデータ型でもやりましたが、それ自体が「正しい」か「正しくないか」を表しています。
$is_student
を学生であるかどうかを表す変数とすれば、true
であれば正しいです。
そして、こういう論理値で条件分岐を組む場合は、わざわざ$is_student == true
などと書かなくても、下記のように書けます。
if ($is_student) { echo 'あなたは学生です。'; }
変数だけで正しいか正しくないか判断できるため、わざわざ比較演算子を使用する必要はありません。
複数条件の分岐
条件文を複数にしたいときもあります。
例えば、年齢が25歳未満で学生であれば、学割パックが使えます、としましょう。
// 年齢 $age = 24; // 学生かどうか $is_student = true;
複数条件を指定する場合には 論理演算子 を使用します。
演算 | 演算記法 | 画像番号 | 説明 |
---|---|---|---|
AND 演算 | A && B |
① | AとB両方の条件を満たす場合に true |
OR 演算 | A || B |
② | AまたはBどちらかの条件を満たす場合に true |
NOT 演算 | A != B |
③ | AがBでない場合に true |
&&
、||
が代表的です。
|
の記号は馴染みがないかもしれませんが、Shift
+ ¥
で出せます(設定を変更していなければ)。
それでは、年齢が25歳未満で学生であれば、学割パックが使えます、という条件分岐を書いてみます。
// 年齢 $age = 24; // 学生かどうか $is_student = true; if ($age < 25 && $is_student) { echo '学割パックが使えるよ'; }
&&
を使用することで、両方の条件を満たしていなければ「正しい」と判断しません。
逆に||
を使用することで、どちらか片方だけでも満たしていれば「正しい」と判断します。
実際に試して確認してみてください。
elseif
さて、年齢が25歳未満で学生であれば、学割パックが使えますが、
学生でなくても25歳未満であれば、若者応援割引が使えるとします。
この場合、下記のように続けてかくことができます。
// 年齢 $age = 24; // 学生かどうか $is_student = true; if ($age < 25 && $is_student) { echo '学割パックが使えるよ'; } elseif ($age < 25) { echo '若者応援割引が使えるよ'; }
このelseif
はいくつでも書くことができます。
もし全ての条件に当てはまらなかったときの処理を記述する場合はelse
を使用します。
<?php // 例として、血液型を診断する条件分岐 $blood = 'B'; if($blood == 'A') { echo "A型です"; } elseif($blood == 'B') { echo "B型です"; } elseif($blood == 'O') { echo "O型です"; } elseif($blood == 'AB') { echo "AB型です"; } else { echo "A/B/O/ABから選択してください"; } ?>
Switch文
先ほどの血液型の条件分岐ですが、別の書き方もあります。
一般的に Switch文 と呼ばれ、文字通り変数の値によって処理をスイッチして切り替えるような意味です。
まずは書き換えたかたちをみていきましょう。
switch ($blood) {
これもif文と同様、$blood
の中身によって処理を切り替えます。
if文と違うのは、比較演算子は使用する必要はありません。
case 'A': print 'A型です'; break;
case
は日本語でも通りやすいですね。
$blood
がAのケースでは、「A型です」と出力します。
break
は、これで条件処理は終わります、という意味です。
このbreak
がないと、その後の処理まで実行してしまいます。(break
がある場所まで)
実際に試してみましょう。
if文とswitch文は一長一短があるため、ケースバイケースで使い分けられるようになりましょう。
三項演算子
if文を簡潔に書く方法として、 三項演算子 と呼ばれる書き方があります。
if文がしっかり書ければ問題ないのですが、簡潔に書けるゆえ、好んで使用する方も多いです。
(かくいう私も、三項演算子で書けそうなところはそちらで書いてしまいます。)
それでは例題を出します。
例えば、$name
が名前の変数だとして、$name
に値が入っていれば名前を表示し、何も入っていなければ「名前を入力してください。」と出力します。
$name = ""; if ($name != "") { echo '名前を受け付けました'; } else { echo '名前を入力してください'; }
ちなみに""
(ダブルコーテーション or シングルコーテーション)だけあって、実際に文字が入っていないことを空文字(からもじ)と言います。
よく、会員登録などで、名前やパスワードを入力しないと「名前を入力してください」といった表示がでますよね?
これを書き換えてみたいと思います。
まずは、書き換え後の形です。
$name = ""; echo ($name != "") ? '名前を受け付けました' : '名前を入力してください';
実際に三項演算子と呼ばれるのは下記の部分です。
($name != "") ? '名前を受け付けました' : '名前を入力してください';
つまり、$name
が""
(空文字)でなければ「名前を受け付けました」、そうでなければ「名前を入力してください」になります。
この書き方は慣れないと難しいのですが、記憶の片隅には留めておきましょう。
補足
最後に補足となりますが、今回のif文では、比較演算子を==
として説明していますが、===
として比較する事も可能です。
=
が一つ増えているだけですが、どう違うかというと、===
での比較は 型まで比較 します。
と言葉で説明されてもわかりづらいですよね。
実際に例文を見てみましょう。
<?php $string = '1'; $int = 1; if (1 === $string) { echo '変数stringはint型です。'; } else { echo '変数stringはstring型です。'; } // 「変数stringはstring型です」が出力される if (1 === $int) { echo '変数stringはint型です。'; } else { echo '変数stringはstring型です。'; } // 「変数stringはint型です。」が出力される
上のコードでは、変数stringに文字列型の1を、変数intに整数型の1を入れています。
if文の比較において、整数1と$string、整数1$とintを比較していますが、実行結果が異なるものになっていることがわかります。
これが何故かというと、
整数1と$stringの比較では、 同じ1でも型が違う 為、実行結果がfalseになっています。
整数1と$intの比較では、 型も値も同じの為、実行結果がtrueになっています。
実際にSESに出てからでは、 ==
と使う機会は少なく、===
で型まで比較することが多いので、===
での比較に慣れておくようにしましょう。
最後に使用例だけ記載しておきます。
使用例 | 意味 |
---|---|
A === B | AとBが等しく、同じ型である場合 |
A !== B | AとBが等しくないか、同じ型でない場合 |
チャレンジ
以下の条件分岐を作成してみましょう。
なお、課題提出は不要です。
- 名前とパスワードの変数を用意する。
- 名前が「 taro 」、パスワードが「 pass 」であった場合、「 ログイン成功です 」と出力する。
- 名前だけ正しかった場合、「 パスワードが間違っています。 」と出力する。
- パスワードだけ正しかった場合、「 名前が間違っています。 」と出力する。
- 名前もパスワードも間違っていた場合は、「 入力情報が間違っています 」と出力する。
上記の条件分岐を作成してください。
これは一般的なユーザーのログインで使用する流れです。
IT用語 SESに向けて準備しよう
3章では一つ一つの項目で数個のIT用語について調べていただきます。
どの用語もSESでよく耳にする言葉なのできちんと調べていきましょう!
下記の用語について、調べてみましょう。
※IT用語についてはチェックテストの範囲外です。
1. IDE(統合開発環境)
2. JOIN(データベースにおいて)
3. コンフリクト