こんにちは、かつコーチです。
前回は変数について解説しました。
今回は、プログラミングの基本の中でも特に重要な「条件分岐」を扱います。
「もし〜だったら、こう処理する」という考え方は、どんなプログラムにも登場する超基本のテクニックなので、しっかり押さえておきましょう。
if文の基本
基本の書き方
条件によって処理を分けるには、if 文を使います。
<?php
$age = 20;
if ($age >= 20) {
echo "成人です";
} else {
echo "未成年です";
}
// 出力: 成人です
?>
「もし $age が20以上なら『成人です』、そうでなければ『未成年です』を表示する」という処理です。
if (条件) の後の { } の中に、条件が成立したときの処理を書きます。
else if で条件を追加する
条件が2つ以上ある場合は、elseif(PHPでは間にスペースを入れない)を使います。
<?php
$score = 75;
if ($score >= 90) {
echo "評価:A";
} elseif ($score >= 70) {
echo "評価:B";
} elseif ($score >= 50) {
echo "評価:C";
} else {
echo "評価:D";
}
// 出力: 評価:B
?>
上から順に条件をチェックしていき、最初に条件が成立したブロックだけが実行されます。
$score が75の場合、最初の $score >= 90 は成立しませんが、次の $score >= 70 で成立するので「評価:B」が表示されます。
比較演算子・論理演算子
よく使う演算子一覧
条件分岐でよく使う演算子をまとめておきます。
| 演算子 | 意味 |
|---|---|
== | 値が等しい(型は問わない) |
=== | 値と型の両方が等しい |
!= | 値が等しくない |
> < >= <= | 大小比較 |
&& | かつ(両方が true) |
\|\| | または(どちらかが true) |
複数条件を組み合わせる
複数条件を組み合わせる例です。
<?php
$age = 25;
$hasTicket = true;
if ($age >= 18 && $hasTicket) {
echo "入場できます";
} else {
echo "入場できません";
}
?>
&&(かつ)や ||(または)を使うことで、1つの if 文で複数の条件をまとめてチェックできます。
条件が複雑になってきたら、変数に一度意味のある名前をつけてから if に渡すと、読みやすさが格段に上がります。
<?php
$isAdult = $age >= 18;
$canEnter = $isAdult && $hasTicket;
if ($canEnter) {
echo "入場できます";
}
?>
switch文:条件のパターンが多いとき
基本の書き方
同じ変数の値によって処理を細かく分けたい場合は、switch 文を使うとすっきり書けます。
<?php
$day = "水";
switch ($day) {
case "月":
echo "週の始まりです";
break;
case "水":
echo "週の折り返しです";
break;
case "金":
echo "もうすぐ休みです";
break;
default:
echo "普通の日です";
break;
}
// 出力: 週の折り返しです
?>
case に該当する値がなければ default の処理が実行されます。
elseif を何個も並べるより、こういった「同じ変数の値によって分岐する」ケースはswitch文の方が見た目がすっきりします。
つまずきやすいポイント:break の書き忘れ
フォールスルーとは
switch文で私が実際にやらかした失敗が、break の書き忘れです。
❌ Before:break を書き忘れる
<?php
$day = "水";
switch ($day) {
case "月":
echo "週の始まりです";
// breakを書き忘れると…
case "水":
echo "週の折り返しです";
break;
}
// 出力: 週の折り返しです("月"のcaseにヒットしていなくても意図せず実行される構造になっている)
?>
break を書かないと、該当した case の処理が終わった後も、次の case の処理までそのまま実行され続けてしまいます(これを「フォールスルー」と言います)。
私は最初、なぜか複数のメッセージが表示されてしまい、原因を探すのに小一時間かかった記憶があります。
✅ After:各 case の最後に必ず break を書く
<?php
$day = "月";
switch ($day) {
case "月":
echo "週の始まりです";
break; // ここで確実に処理を終わらせる
case "水":
echo "週の折り返しです";
break;
}
// 出力: 週の始まりです(意図した通りに1つだけ実行される)
?>
switch文を書くときは、各 case の最後に break を書き忘れていないか、必ず確認する癖をつけましょう。
フォールスルーをあえて使う場面
余談ですが、このフォールスルーの性質は「複数のcaseで同じ処理をしたいとき」にあえて使われることもあります。
<?php
$day = "土";
switch ($day) {
case "土":
case "日":
echo "休日です";
break;
default:
echo "平日です";
break;
}
// 出力: 休日です
?>
「土」と「日」のどちらでも同じ処理をしたい場合、case "土": の直後に break を書かずに次の case "日": に処理を続けさせることで、コードをまとめられます。
意図せず起きると事故ですが、意図的に使えば便利なテクニックでもあります。
== と === の違いにも要注意
値だけの比較と型まで含めた比較
もう一つよくあるつまずきが、==(値だけを比較)と ===(値と型の両方を比較)の違いです。
❌ Before:== を使って意図しない結果になる
<?php
$userId = "1"; // フォームから送られてきた文字列
$targetId = 1; // データベースから取得した数値
if ($userId == $targetId) {
echo "一致しました"; // 型が違っても値が同じなら一致してしまう
}
?>
"1"(文字列)と 1(数値)は本来型が違うデータですが、== では「値としては同じ」と判定されて一致してしまいます。
ユーザーIDの照合など、厳密さが求められる場面では思わぬバグにつながります。
✅ After:=== を使って型まで含めて厳密に比較する
<?php
$userId = "1";
$targetId = 1;
if ((int)$userId === $targetId) {
echo "一致しました"; // 明示的にキャストしてから型まで厳密に比較する
}
?>
比較する前に型を揃えたうえで === を使うことで、「値も型も一致している」という意図がコードにも表れます。
意図しない比較結果を防ぐために、迷ったら基本的に === を使うのがおすすめです。
まとめ
この記事のポイント
if/elseif/elseで条件によって処理を分岐できる- 条件のパターンが多いときは
switch文がすっきり書ける - switch文の
breakの書き忘れ(フォールスルー)に注意する ==と===の違いを理解し、迷ったら===を使う
次に読むべき記事
条件分岐が使えるようになったら、次は「同じ処理を繰り返す」ループ処理を学んでいきます。
→ 次の記事:PHPのfor・while・foreachで繰り返し処理をマスターする