PHPで「条件によって処理を変える」ときは、if、elseif、elseを使います。選択肢が多い場面ではswitch、値を返す分岐にはmatchも便利です。
この記事では、点数や会員区分を例に、条件分岐をどの順番で書けばよいかを初心者向けに解説します。比較演算子を先に確認したい方は、比較演算子の基本を読んでから進めてください。
この記事でできるようになること
if・elseif・elseで条件を分ける&&・||・!で複数条件を組み合わせるswitchとmatchを場面に応じて使い分ける- 代入と比較、文字列と数値の比較で起こりやすいミスを避ける
if文の基本
ifの丸括弧には、結果がtrueまたはfalseになる条件を書きます。条件がtrueなら、中括弧の中が実行されます。
<?php
$age = 20;
if ($age >= 18) {
echo "成人です";
}
この例では$age >= 18がtrueなので、「成人です」と表示されます。
elseで条件に当てはまらない場合を書く
elseは、ifの条件がfalseだった場合に実行する処理です。
<?php
$age = 15;
if ($age >= 18) {
echo "成人です";
} else {
echo "18歳未満です";
}
elseifで3通り以上に分ける
条件が複数ある場合はelseifを使います。上から順番に判定し、最初にtrueになったブロックだけが実行されます。
<?php
$score = 82;
if ($score >= 90) {
echo "評価A";
} elseif ($score >= 70) {
echo "評価B";
} elseif ($score >= 50) {
echo "評価C";
} else {
echo "再挑戦";
}
実行結果は「評価B」です。$score >= 70に当てはまった時点で、それより下の条件は調べません。
条件は範囲が狭いものから書く
次のように70点以上を先に書くと、95点でも最初の条件に当てはまり「評価B」になってしまいます。
<?php
$score = 95;
// 90点以上の条件へ到達しないため、意図した結果になりません
if ($score >= 70) {
echo "評価B";
} elseif ($score >= 90) {
echo "評価A";
}
点数のように大きい値から判定する場合は、90点、70点、50点の順に並べましょう。
論理演算子で条件を組み合わせる
| 演算子 | 意味 | 例 |
|---|---|---|
&& | 両方とも満たす | $age >= 18 && $hasTicket |
|| | どちらかを満たす | $isAdmin || $isEditor |
! | 条件を反対にする | !$isClosed |
<?php
$age = 20;
$hasTicket = true;
if ($age >= 18 && $hasTicket === true) {
echo "入場できます";
} else {
echo "入場できません";
}
複雑な条件は、意味のある変数名に分けると読みやすくなります。
<?php
$age = 20;
$hasTicket = true;
$canEnter = $age >= 18 && $hasTicket;
if ($canEnter) {
echo "入場できます";
}
値だけでなく型も比較する
==は型を変換してから比較する場合があります。初心者のうちは、値と型の両方を比較する===と!==を基本にすると、予想外の判定を減らせます。
<?php
$input = "10";
var_dump($input == 10); // true
var_dump($input === 10); // false(文字列と整数で型が異なる)
フォームから受け取った値は文字列になることが多いため、必要に応じて型変換や入力検証を行いましょう。
switch文:同じ値を何度も比較する
switchは、一つの値に対して複数の候補を調べるときに使えます。各caseの最後にbreakを書くのを忘れないようにしてください。
<?php
$role = "editor";
switch ($role) {
case "admin":
echo "すべての操作ができます";
break;
case "editor":
echo "記事を編集できます";
break;
default:
echo "記事を閲覧できます";
}
match式:値を安全に返す
PHP 8以降ではmatch式を使えます。switchと違い、比較には厳密比較が使われ、breakも不要です。分岐結果を変数へ代入したい場面に向いています。
<?php
$status = "paid";
$message = match ($status) {
"pending" => "支払い待ちです",
"paid" => "支払い済みです",
"cancelled" => "キャンセルされました",
default => "不明な状態です",
};
echo $message;
if・switch・matchの使い分け
| 使うもの | 向いている場面 |
|---|---|
if / elseif / else | 大小比較、範囲、複数条件を組み合わせる |
switch | 一つの値に対して複数の処理を実行し分ける |
match | 一つの値から安全かつ簡潔に結果を返す |
よくある間違い
比較のつもりで代入しない
=は代入、===は比較です。条件式でif ($status = "paid")と書くと、比較ではなく代入になってしまいます。
条件を一行へ詰め込みすぎない
条件が長くなったら、途中結果を名前付きの変数へ分けます。何を判定しているかが読みやすくなり、修正もしやすくなります。
練習問題
年齢が12歳以下なら「子ども料金」、65歳以上なら「シニア料金」、それ以外なら「通常料金」と表示してください。
解答例を見る
<?php
$age = 68;
if ($age <= 12) {
echo "子ども料金";
} elseif ($age >= 65) {
echo "シニア料金";
} else {
echo "通常料金";
}
まとめ
- 範囲や複数条件は
if / elseif / elseで判定する - 同じ値の候補を並べるなら
switchまたはmatchを使う - 比較は
===と!==を基本にする - 上から判定される順番を意識する
次は、条件分岐を繰り返し処理と組み合わせてみましょう。foreach文の使い方では、配列を一つずつ処理する方法を学べます。
コメント