# ch03 — 比較演算子

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

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

## 本文

# ch03 — 比較演算子

## 概要

`if` の条件式の中身を作るのが比較演算子だ。`==` (等しい)、`!=` (等しくない)、`<` `>` `<=` `>=` (大小比較) の 6 種類を覚えれば、ほとんどの条件式は書ける。比較演算子の結果は必ず `true` か `false` のどちらか (真偽値) で、これを `if` がそのまま条件として読む。

ここで PHP 学習者が最初にぶつかる **超重要なハマりどころ** が、`==` (緩い比較) と `===` (厳密比較) の違い。`==` は型を揃えてから比較するため、`0 == "0"` は `true` になる (文字列を数値に変換して比較)。一方 `===` は **型まで一致しないと真にならない** ので、`0 === "0"` は `false`。HTTP リクエストの値や DB の戻り値は文字列で来るため、ここで `==` と `===` の使い分けを誤ると、見えないバグの温床になる。基本方針は「**迷ったら `===` を使う**」。

PHP 7 までは `0 == "abc"` が `true` という強烈な挙動があった (文字列が数値 0 に変換されていた)。これが PHP 8 で `false` に修正されたのは PHP の歴史的にも大きな変更で、古い記事のサンプルコードを写経すると現代の PHP で結果が違って驚くことがある。この章では基本 6 演算子を体に入れつつ、`==` と `===` の違いを「**そういう罠がある**」と頭に焼き付けるのが目的。

## 学習目標

- `==` `!=` `<` `>` `<=` `>=` の意味を言える
- 比較結果が真 / 偽になると理解する
- `if` の条件式に比較演算子を組み合わせて使える

## 所要時間

スライド 4 分 + ドリル 2 問 = **12 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | 2 つの整数が等しいか判定 (yes / no) |
| 02 | 2 つの整数のどちらが大きいか判定 (a / b / equal) |

## 採点

```bash
php scripts/grade.php topics/conditional/ch03-comparison/drill/01-equal/
```

## 関連チャプター

- [`ch01-if`](../ch01-if/) — 比較演算子を載せる `if` の基本形
- [`ch02-if-else`](../ch02-if-else/) — 比較結果で 2 分岐させる
- [`ch04-logical`](../ch04-logical/) — `&&` `||` で比較式を組み合わせる

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 2 / Chapter 3
  目的: 比較演算子 (== != < > <= >=) を使って if の条件を書けるようにする
  扱わない: 厳密比較 === / 論理演算子 && || (後続章) / 型ジャグリング詳細
  読み上げ時間目安: 4 分
-->

# 比較演算子

Lesson 2 / Chapter 3

---

## 比較演算子の一覧

| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
| `==` | 等しい | `3 == 3` | 真 |
| `!=` | 等しくない | `3 != 5` | 真 |
| `<` | より小さい | `3 < 5` | 真 |
| `>` | より大きい | `3 > 5` | 偽 |
| `<=` | 以下 | `3 <= 3` | 真 |
| `>=` | 以上 | `5 >= 3` | 真 |

- 結果は **真 (true)** か **偽 (false)** のどちらか

---

## `==` は「等しい」

```php
<?php
$a = 5;
$b = 5;

if ($a == $b) {
    echo "等しい\n";
}
```

- `==` を **2 つ** 続けて書く
- `=` (1 つ) は **代入** なので別物
- 初学者が **一番間違える** 部分

---

## `!=` は「等しくない」

```php
<?php
$a = 5;
$b = 3;

if ($a != $b) {
    echo "違う\n";
}
```

- `!` は「ではない」の意味
- `!=` で「等しくない」
- 「`==` の逆」と覚えるとよい

---

## 大小比較 `<` `>` `<=` `>=`

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

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

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

- `<` `>` は **境界を含まない**
- `<=` `>=` は **境界を含む**
- `60 >= 60` は **真**、`60 > 60` は **偽**

---

## 比較は数値以外でもできる

```php
<?php
$name = "太郎";

if ($name == "太郎") {
    echo "こんにちは 太郎 さん\n";
}
```

- 文字列同士も `==` で比較できる
- 文字列は `"` または `'` で囲む

---

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

✅ `==` `!=` `<` `>` `<=` `>=` の意味が言える
✅ `=` (代入) と `==` (比較) の違いが分かる
✅ `if` の条件式で比較演算子を使える

→ ドリルへ
