# ch02 — if / else

Source: https://php-school.pages.dev/topics/conditional/ch02-if-else/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: 条件分岐
Level: L2

Reference (official): https://www.php.net/manual/ja/language.control-structures.php

## 本文

# ch02 — if / else

## 概要

`if` だけだと「条件が真のときの処理」しか書けない。だが現実のロジックの多くは **二者択一** だ。合格か不合格か、有効か無効か、奇数か偶数か、ログイン済みか未ログインか — 「条件を満たさなかったときも別の処理をしたい」場面が圧倒的に多い。これを表現するのが `if / else` で、`else` ブロックは「`if` の条件が偽だったときに必ず通る道」になる。

3 つ以上の分岐が必要になったら `elseif` を使う。`if ... elseif ... elseif ... else` は **上から順に条件を判定し、最初に真になった節だけ** を実行する。たとえば点数で A / B / C / D を判定するときは、上から `>= 90` `>= 80` `>= 70` と書いていけば、`>= 90` に当てはまった瞬間に下の節は見にいかない。この「上から評価して止まる」性質を理解すると、条件の書く順番が大事だと分かる (`>= 70` を一番上に書いてしまうと、満点でも C 判定になってしまう)。

ネストした `if` を何重にも書くより、`elseif` で横並びにする方が **読みやすく・バグも減る** ので、3 分岐以上はまず `elseif` を検討するのが基本。さらに分岐数が多くて値の等価比較なら、後で扱う `ch05-switch` や PHP 8 の `match` 式の出番だ。この章では `if / else` の基本形と `elseif` を体に入れる。

## 学習目標

- `if / else` で 2 分岐できる
- `elseif` で 3 分岐以上に分けられる
- 上から順に条件を判定すると理解する

## 所要時間

スライド 4 分 + ドリル 3 問 = **15 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | 入力された整数が偶数か奇数かを出力 |
| 02 | 60 以上なら合格、それ以外なら不合格 |
| 03 | 点数で A / B / C / D を判定 |

## 採点

```bash
php scripts/grade.php topics/conditional/ch02-if-else/drill/01-even-odd/
```

## 関連チャプター

- [`ch01-if`](../ch01-if/) — `if` 単独の基本形 (この章の前提)
- [`ch03-comparison`](../ch03-comparison/) — `>=` `==` などの比較演算子の詳細
- [`ch05-switch`](../ch05-switch/) — 多分岐を読みやすく書く別の選択肢

## スライド

---
marp: true
theme: dojo
paginate: true
size: 16:9
---

<!--
LLM_CONTEXT:
  Lesson 2 / Chapter 2
  目的: if / else / elseif で 2 分岐・多分岐ができるようにする
  扱わない: switch (後続章) / 三項演算子 / 論理演算子 (後続章)
  読み上げ時間目安: 4 分
-->

# if / else

Lesson 2 / Chapter 2

---

## `else` は「そうでなければ」

```php
<?php
$score = 40;

if ($score >= 60) {
    echo "合格\n";
} else {
    echo "不合格\n";
}
```

- `if` の条件が **偽** のときに `else { ... }` の中身が実行される
- `if` か `else` の **どちらか一方だけ** が必ず実行される

---

## 書き方のルール

```php
if ($score >= 60) {
    echo "合格\n";
} else {
    echo "不合格\n";
}
```

- `if (...) { ... } else { ... }` の形
- `}` と `else` は **同じ行** に並べてよい (慣習)
- `else` には条件を書かない (書くのは `elseif`)

---

## `elseif` で 3 分岐以上

```php
<?php
$score = 75;

if ($score >= 90) {
    echo "A\n";
} elseif ($score >= 70) {
    echo "B\n";
} else {
    echo "C\n";
}
```

実行結果:

```
B
```

- `elseif (条件)` で条件を増やせる
- いくつでも並べられる

---

## 上から順に判定する

```php
if ($score >= 90) {
    // 1番目: 90 以上か?
} elseif ($score >= 70) {
    // 2番目: 70 以上か? (90 以上は既にはじかれた)
} else {
    // どれにも当てはまらない
}
```

- 条件は **上から順** にチェックされる
- 当てはまった瞬間にそのブロックだけ実行して **抜ける**
- だから上から **厳しい順** に並べる

---

## 余りで偶奇判定

```php
<?php
$n = 7;

if ($n % 2 == 0) {
    echo "偶数\n";
} else {
    echo "奇数\n";
}
```

- `$n % 2` は 2 で割った余り
- 余りが `0` なら偶数、そうでなければ奇数
- `==` は「等しい」(ch03 で詳しく)

---

## このチャプターでできるようになること

✅ `if / else` で 2 分岐できる
✅ `elseif` で 3 分岐以上に分けられる
✅ 条件は上から順に判定されると分かる
✅ `%` と組み合わせて偶奇判定ができる

→ ドリルへ
