PHP講座#7

今回の記事もPHP講座です!
 それでは今回も張り切っていきましょう!

前回の復習

 前回の記事では条件式の書き方について学びましたね。
 比較演算子と論理演算子を用いて条件を書くことができるんでしたよね。

前回の練習問題の解答

1問目

 岩ちょこは22歳で、親友の年齢は20歳です。二人の年齢の差が2歳である場合は"Yes"をそれ以外の場合は"No"を出力するプログラムを条件分岐を用いて書きなさい。



解答

<?php
$iwachoco = 22;
$friend = 20;
if($iwachoco - $friend == 2 || $friend - iwachoco == 2) {
  $text = "Yes";
} else {
  $text = "No";
}
echo $text."<br>";
?>

2問目

 このプログラムはどのような値を出力するでしょうか。考えた後、実際に試してみてください。

<?php
$num_a = 4;
$num_b = 4;
if($num_a !== $num_b) {
  echo "foo!<br>";
} else {
  echo "yeah!!<br>";
}
?>



解答
yeah!!

3問目

 変数$numberに6を入れた場合と8を入れた場合を試してください。このプログラムはどのような出力するでしょうか。

<?php
$number = 4;
if($number % 2 == 0 && $number % 3 == 0) {
  echo "6の倍数です<br>";
} elseif($number % 3 == 0) {
  echo "3の倍数です<br>";
} elseif($number % 2 == 0) {
  echo "2の倍数です<br>";
}
?>



解答

6を入れた場合

6の倍数です

8を入れた場合

2の倍数です

今回の学習内容

 今回はswitch文について学んでいきます。このswitch文までで条件分岐についての勉強はおしまいです! (・∀・(・∀・(・∀・*)オーメー♪
 早速switch文の基本形を見ていきましょう。

switch(変数) {
 case 値1:
  処理1;
  break;
 case 値2:
  処理2;
  break;
 case 値3:
  処理3;
  break;
}
 色々、厄介なところがありますが、プログラムを書く上で注意しておいてほしい部分を先に述べておきます。
 1つ目はbreak; を書き忘れないようにしてくださいということです。break文については、この後説明していきます。
 2つ目はコロン(:)とセミコロン(;)の両方が出てくるので、混同しないようにしてくださいということです。

 この2つはswitch文を書く時に、間違える人が多いので意識するだけでもしておいてもらえると助かります。
 それでは基本構文の解説をしていきましょう。

 switchの後ろにある括弧"( )"の中には、変数や、算術演算子を用いた式が入ります。その後に、先ほどの括弧の値と一致する値のあるcaseに処理が移行します。例えば、括弧の値が"case 値2:" の値2のところと一致していたら、赤い色の部分を実行するというようなことができるのがswitch文です。

switch(変数) {
 case 値1:
  処理1;
  break;
 case 値2:
  処理2;
  break;

 case 値3:
  処理3;
  break;
}

 また赤い色の処理の部分にbreak;が書かれています。この文の意味は、今実行している波括弧 "{ }"内の処理を中断して、波括弧"{ }"の外の処理へジャンプするという命令です。このbreak文を書かないと、その下の"case 値3:" より下の行まで処理が止まらなくなるので、break;は描き忘れないように注意してください。

 それでは実際にソースコードを書いて試してみましょう!

<?php
$number = 4;
switch($number) {
  case 1:
    echo "大吉<br>";
    break;
  case 2:
    echo "吉<br>";
    break;
  case 3:
    echo "凶<br>";
    break;
  case 4:
    echo "大凶<br>";
    break;
}
?>

大凶

 このプログラムを実行すると大凶と表示されます。(w
これは変数$numberの中に4が入っていて、その値に一致するcaseに処理が移ったためです。

 もう少し試してみてみましょうか。

<?php
$month = 3;
$date = 31;
switch(($date - $month + 12) % 4) {
  case 0:
    echo "大吉<br>";
    break;
  case 1:
    echo "吉<br>";
    break;
  case 2:
    echo "凶<br>";
    break;
  case 3:
    echo "大凶<br>";
    break;
}
?>

大吉

 このようにswitchの後ろの括弧には、算術演算子を用いた式を入れることもできます。

 次は、わざと"break;" を書かないでプログラムを実行した場合、どういう挙動を示すのかを試して確認してみましょう!

<?php
$age = 22;
switch($age % 2) {
  case 0:
    echo "even<br>";
    //break;を書き忘れている箇所
  case 1:
    echo "odd<br>";
    break;
}
?>

even
odd
 このように、処理が"break;" を見つけるまで止まらない状態になるので、意図せずに下の処理まで行ってしまいます。
 何故、break;をわざわざ書かなくてはならないのでしょうか?自動で処理を終わるような設計になっていないのでしょうか?
 それは、わざと"break;" を書かないで処理を下に流したい場合があるからです。次のコードをみてみましょう。

<?php
$age = 3;
switch($age) {
  case 3:
  case 5:
  case 7:
    echo "七五三です<br>";
    break;を書き忘れている箇所
  default:
    echo "七五三ではありません<br>";
    break;
}
?>

七五三です
 このソースコードでは、"case 3:" の時と、"case 5:" の時と、"case 7:" の時は同じ処理をしたいためわざと"break;" を書いていません。このように処理をまとめて扱うことができるよう設計されているため、処理の終わりを"break;" で明示してあげる必要性が出てきているのですね
 また、このソースコードで"default:" というのが出てきていますが、これは、"case 値:" で設定しなかった値がswitchの後ろの括弧に入っているときに実行する部分で、その他を意味しています。

まとめ

 今回は、switch文について学びました。このswitch文は最悪理解していなくても、if文で書くことができます。しかし、こちらの方が簡潔でわかりやすいコードが書けるので、switch文をマスターしておきましょう。前回の記事でも言ってましたが、よくわからないところや、解説をもっと詳しくして欲しいところ等があればコメント欄で気軽に言っていただけると嬉しいです。
 次回は、2つ目の難関に入る前に優しめの内容である、定数について勉強していきましょう。

練習問題

1問目

 変数$valueの値が、1または2ならば"小吉"、3または4ならば"中吉"、5ならば"大吉"、それ以外なら"ぴょん吉"と出力するソースコードをswitch文を用いて作成しなさい。変数の値は自由にいじってみてください。

2問目

 はじめに変数$cityに"渋谷"を入れてください。switch文を用いて、次の出力を得られるコードを作成してください。

渋谷なら、"ハチ公"
仙台なら、"ステンドグラス"
そのほかの地名なら、"不明"

3問目

 以下のif-elseif-else文で書かれたプログラムをswitch文を用いたプログラムに書き直してみてください。

<?php
$number = 3;
if($number == 1) {
  echo "1<br>";
} elseif($number == 2) {
  echo "2<br>";
} elseif($number == 3) {
  echo "3<br>";
} else {
  echo "another number<br>";
}
?>


最後まで見ていただきありがとうございます。また別の記事でお会いできることを祈っております。



www.iwachoco-blog.com
www.iwachoco-blog.com