条件分岐
if / else / switch — 条件で処理を切り分ける
入力や計算結果に応じて処理を切り替える「条件分岐」を扱うトピック。判定の道具 (比較演算子・論理演算子) もここで揃える。
このトピックで身につくこと
if/else/elseifで 2 分岐・多分岐を書き分けられる- 比較演算子 (
==!=<><=>=) を使い分けられる - 論理演算子 (
&&||!) で複数条件を組み合わせられる switchで値の多分岐を書ける- 三項演算子
? :で短い 2 択を 1 行にできる
前提知識の要点
このトピックは hello の echo / 変数 / 数値 / 入力の知識を前提にする。要点だけ:
<?php
// 文字を出す (\n は改行。ダブルクォート必須)
echo "OK\n";
// 変数に値を入れる
$n = 10;
// 標準入力を整数で受け取る
$n = (int)trim(fgets(STDIN));
// 数値の余り (偶数判定の準備)
echo $n % 2; // 0 なら偶数| やりたいこと | 書き方 |
|---|---|
| 画面に出す | echo "..."; |
| 変数に保存 | $x = 値; |
| 入力 (整数) | $n = (int)trim(fgets(STDIN)); |
| 偶数判定 | $n % 2 (0 なら偶数) |
これで OK。詳しくやりたければ hello トピックへ。
chapter 一覧
| # | chapter | 内容 | 学習目標 |
|---|---|---|---|
| 1 | ch01-if/ |
if 単独 | 条件が真のときだけブロックを実行できる |
| 2 | ch02-if-else/ |
if / else / elseif | 2 分岐・3 分岐以上に書き分けられる |
| 3 | ch03-comparison/ |
比較演算子 | == != < > <= >= を使い分けられる |
| 4 | ch04-logical/ |
論理演算子 | && \|\| ! で複数条件を組み合わせられる |
| 5 | ch05-switch/ |
switch 文 | 値の多分岐を switch で書ける |
| 6 | ch06-ternary/ |
三項演算子 | ? : で if/else を 1 行に書ける |
合計 6 chapter / 15 drill / 所要 1.5〜2 時間。
進め方
- 各 chapter の
slide.mdを読む (4〜5 分) drill/配下の問題を順番に解く- 採点:
php scripts/grade.php topics/conditional/<chapter>/drill/<drill>/
つまづきポイント
| 症状 | 多くの原因 |
|---|---|
if ($x = 10) が常に真になる |
= は代入。比較は == を使う |
| switch の case が全部実行される | 各 case の最後に break; を入れていない |
if (...) の中身が動かない |
条件が偽になっている → var_dump($x) で値を確認 |
&& と \|\| の動きが直感と違う |
&& は両方真、\|\| はどちらか真。日本語の「かつ/または」と対応させる |
| 入力との比較で常に偽 | 入力は文字列。(int) でキャストしてから比較する |
関連トピック
| トピック | 関係 |
|---|---|
| hello | このトピックの前提 (echo / 変数 / 数値 / 入力) |
| loop | 条件分岐とループを組み合わせて使う |
| function | 条件分岐を関数の中で使う |
| db | SQL の WHERE 句は条件式そのもの |
| exception | try/catch は例外専用の条件分岐 |
トピックを並列で参照する全体地図は TOPICS_INDEX.md にある。
案件 (dojo_map.tsv) での参照
topic_slug chapter_dir
conditional topics/conditional/ch01-if
conditional topics/conditional/ch02-if-else
conditional topics/conditional/ch03-comparison
...
slug conditional で参照可。02-conditional / conditional どちらの path でもアクセスできる (シンボリックリンク)。
このレッスンの章
スクール現場で詰まる「よくある落とし穴」
公式マニュアルには書かれていないけれど、講師として受講生がよくハマるポイントを並べました。
-
elseif と else if の違い
どちらも動くが `elseif` 1語が公式推奨。コーディング規約(PSR-12)も elseif
-
switch で break を忘れる
break がないと次の case に処理が流れ落ちる。意図的な fall-through ならコメントで明示する
-
for ループのカウンタを foreach で書きたい誘惑
配列を回すだけなら foreach。インデックスが欲しい時だけ `foreach ($arr as $i => $v)`