こんにちは。サイオステクノロジーの川田です。
PHPを始めてみよう!触ってみよう!と考えている方向けへのPHP超入門をお届けしております。
今回は第3回となります。
アジェンダ
タイトルにもある通り、if文とswitch文をご紹介していきます。
使用するツールはこちらです。
環境の詳細についてはアジェンダの「1.環境構築」へ(/・ω・)/
-
Visual Studio Code
拡張機能:Remote Development - Docker
条件分岐について
条件分岐についてご説明します。
「もし条件を満たしていたら、〇〇をしてね」と命令をすることができます。
公園で遊ぶことに例えてみます。滑り台、ブランコ、砂場の3種類があるとします。
条件1:滑り台を選んだ場合⇒手をあげて滑る
条件2:ブランコを選んだ場合⇒風を感じながら漕ぐ
条件3:砂場を選んだ場合⇒砂まみれになる
それ以外の場合⇒帰る
各条件ごとに処理を決めることができます。
フローチャートを簡単に作成しました。
PHPだけではなく多くの言語が上から下へと実行されていきます。
その条件分岐には「☞if文」と「☞switch文」があります。
if/elseif/else
ではif文の説明になります。if文には「if」、「else」、「elseif」があります。
それぞれの書き方を見ていきましょう。
- ifのみ
一つの条件を満たす場合はこのように記載します。
if ( 条件 ){ //処理 }
- if/else
「else」を書くことで条件を満たさない場合の処理を決めることができます。
if( 条件 ) { // 処理 } else { // 条件に満たさなかった場合の処理 }
- if/elseif/else
複数の条件を書きたい場合は「elseif」を書きます。
if( 条件1 ) { // 条件1を満たす場合に行う処理 } elseif ( 条件2 ) { // 条件2を満たす場合に行う処理 } else { // 条件に満たさなかった場合の処理 }
実際に書いてみよう!
先ほどの公園で試して書いてみましょう。
<?php // 標準入力 echo "「滑り台」「ブランコ」「砂場」から選んでください:"; $park = trim(fgets(STDIN)); if ( $park == "滑り台" ) { echo "手をあげて滑る"; } elseif( $park == "ブランコ") { echo "風を感じながら漕ぐ"; } elseif ( $park == "砂場" ) { echo "砂まみれになる"; } else { echo "帰る!!!!!!"; }
4行目に「fgets(STDIN)」とありますが、これは標準入力された値を取得することができます。
ではデバッグをしてPHPを実行してみましょう!
デバッグ方法はこちらの緑の「▷」を押してくださいね!
VSCodeのターミナルで「php sample4.php」を実行していきます。
root@2c51effb8747:/var/www/html# php sample4.php 「滑り台」「ブランコ」「砂場」から選んでください:
3つの中から1つ入力して「enter」を押してください。
例はブランコを入力したので、「風を感じながら漕ぐ」が出力されました★
root@2c51effb8747:/var/www/html# php sample4.php 「滑り台」「ブランコ」「砂場」から選んでください:ブランコ 風を感じながら漕ぐ
3つ以外のものを入力した場合はelseに入り「帰る」が出力されます。
root@2c51effb8747:/var/www/html# php sample4.php 「滑り台」「ブランコ」「砂場」から選んでください:鉄棒 帰る!!!!!!
論理演算子
この条件とこの条件は同じ処理にしたいと思うこともあると思います。
その場合は「or(||)」「and(&&)」「not(!)」を使って複数条件分岐します。
例 | 結果 |
$a or $b | $aまたは$bのどちらか、その両方がtrueのときture |
$a and $b | $aかつ$bがtrueのときtrue |
$a || $b | $aまたは$bのどちらか、その両方がtrueのときture |
$a && $b | $aかつ$bがtrueのときtrue |
!$a | $aがtureではないときtrue |
今回は「||」と「&&」の書き方をご紹介致します。
- ||
<?php $sample = "orange"; if ( $sample == "apple" || $sample == "orange" ) { echo "果物です"; } else { echo "それ以外です"; }
変数はapple×、orange〇で条件を満たしているため「果物です」が出力されます。
※「&&」と書いてしまうと「それ以外です」が出力されます。
root@2c51effb8747:/var/www/html# php sample5.php 果物です
- &&
<?php $age = 20; $gender = "女性"; if ( $age >= 20 && $gender == "女性" ){ echo "20歳以上の女性"; } else { echo "それ以外です"; }
$ageと$genderはif文の条件に満たしているため「20歳以上の女性」と出力されます。
root@2c51effb8747:/var/www/html# php sample5.php 20歳以上の女性
$age=19に修正したとします。20歳以上という条件に満たしていないため「それ以外です」と出力されます。
ではこれを「||」に変えてしまうと$ageは満たしていないが$genderは満たしているため「20歳以上の女性」と出力されてしまいます。
<?php $age = 19; $gender = "女性"; if ( $age >= 20 || $gender == "女性" ){ echo "20歳以上の女性"; } else { echo "それ以外です"; }
root@2c51effb8747:/var/www/html# php sample5.php 20歳以上の女性
比較演算子
条件式の中に使用されている比較演算子をご紹介します。
公式ページは☞こちら
例 | 結果 |
$a == $b | $aと$bの値が等しい |
$a === $b | $aと$bの値が等しく、同じ型である |
$a != $b | $aと$bの値が等しくない |
$a <> $b | $aと$bの値が等しくない |
$a !== $b | $aと$bの値が等しくない、同じ型ではない |
$a < $b | $aの値が$bの値より小さい |
$a <= $b | $aの値が$bの値より小さいか等しい |
$a > $b | $aの値が$bの値より大きい |
$a >= $b | $aの値が$bの値より大きいか等しい |
緩やかな(==)比較と厳密な(===)比較
公式ページに型の比較表がありますので気になる方は☞こちら
「==」と「===」の違いをちょこっと見ていきます。
<?php $sample = 3; if ( $sample == "3" ){ echo "true"; } else { echo "false"; }
こちらのコードは数値の3と文字列の3を比較しています。
先ほどの説明でもあった通り緩やかな比較のため実行結果として「true」が出力されます。
root@2c51effb8747:/var/www/html# php sample5.php true
厳密な比較(===)にしてみます。
<?php $sample = 3; if ( $sample === "3" ){ echo "true"; } else { echo "false"; }
こちらは型が違うため「false」と返ってきます。
root@2c51effb8747:/var/www/html# php sample5.php false
以上が比較演算子についてでした。
次はswitch文についてご説明していきます。
switch/case
switch文はif文とは異なった書き方になるので確認してみましょう。
※switch/caseは緩やかな比較となりますので注意が必要です。
書き方は以下の通りです。
switch( 式 ){ case 値1: // 式が値1と等しい場合の処理 break; case 値2: // 式が値2と等しい場合の処理 break; default: // 値1、値2でもない場合の処理 break; }
break文はswitch文を抜ける処理になります。
breakがないと次のcaseへと処理が続行されてしまうため基本的にはbreak文を書くことを心掛けましょう。
緩やかな比較について
先ほども言いましたが、switch文は緩やかな比較(==)で型までの厳密な比較はしておりません。
<?php $sample1 = 3; $sample2 = "3"; var_dump($sample1, $sample2); switch( $sample1 ){ case $sample2: echo "処理1です"; break; case 3: echo "処理2です"; break; default: echo "それ以外です"; break; }
例えばこちらを実行すると「処理1です」が出力されます。
root@2c51effb8747:/var/www/html# php sample5.php int(3) string(1) "3" 処理1です
厳密な比較をしたい場合はこのように書きます。
<?php $sample1 = 3; $sample2 = "3"; // var_dump($sample1, $sample2); switch( $sample1 ){ case $sample1 === $sample2: echo "処理1です"; break; case $sample1 === 3: echo "処理2です"; break; default: echo "それ以外です"; break; }
root@2c51effb8747:/var/www/html# php sample5.php 処理2です
型までの比較になり「処理2です」が出力されました。
if文を使うかswitch文を使うかは好みの問題になりますね><
複数条件の書き方
if文と同様にこの条件もしくはこの条件は同じ処理にしたいと思うこともあると思います。
その場合はこのように書きます。
<?php $sample = "orange"; switch( $sample ){ case "apple": case "orange": case "pineapple": echo "果物です"; break; case "cabbage": case "carrot": echo "野菜です"; break; default: echo "それ以外です"; break; }
break文を使わずに続けて書きます。
実行結果は「果物です」が出力されます。
root@2c51effb8747:/var/www/html# php sample5.php 果物です
実際に書いてみよう!
もうすでにいくつか実装しておりますが、何回も出ております公園の例えで処理を書いてみます。
<?php // 標準入力 echo "「滑り台」「ブランコ」「砂場」から選んでください:"; $park = trim(fgets(STDIN)); switch( $park ){ case "滑り台": echo "手をあげて滑る"; break; case "ブランコ": echo "風を感じながら漕ぐ"; break; case "砂場": echo "砂まみれになる"; break; default: echo "帰る!!!!!!"; break; }
実行結果はif文となにも変わりません。「砂場」を入力すると「砂まみれになる」がちゃんと出力されます!
root@2c51effb8747:/var/www/html# php sample6.php 「滑り台」「ブランコ」「砂場」から選んでください:砂場 砂まみれになる
まとめ
いかがでしたか?今回は条件分岐や論理演算子、比較演算子についてをまとめました。
次回は無限ループって怖い!☞繰り返し処理についてご紹介します。
最後までお読みいただきましてありがとうございました(^ω^)