# ch05 — 変数

Source: https://php-school.pages.dev/topics/hello/ch05-variables/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: PHPをはじめよう
Level: L1

Reference (official): https://www.php.net/manual/ja/language.basic-syntax.php

## 本文

# ch05 — 変数

## 概要

変数はプログラミングで最初に出会う **「値を入れておく箱」** の概念で、計算結果や入力された文字列など、後で使い回したいデータに **名前を付けて保管する** ための仕組みだ。変数を使えるようになって初めて、プログラムは「状況に応じて動く」ものになる。

PHP の変数の最大の特徴は **必ず先頭に `$` を付ける** ことだ。書き方は `$name = "鈴木";` のように `$名前 = 値;` で、`echo $name;` のように使う。**大文字小文字は区別される** ので `$Name` と `$name` は別物となり、ここを混同するのが初学者の典型的なつまずきだ。型 (整数か文字列か) は宣言しなくてよい **動的型付け** で、後から別の型を入れ直すこともできる (PHP 7 以降は型ヒントで安全性を高められるが、本章では扱わない)。

もうひとつ気を付けたいのが **未定義変数の参照**。タイプミスで `$name` を `$nmae` と書くと、PHP は警告を出すか、空文字として黙って動いてしまう。エディタの補完を使う、変数名は意味のある単語にする、という習慣を早めに付けておきたい。

## 学習目標

- `$名前 = 値;` の形で変数に値を入れられる
- `echo` で変数の中身を取り出せる
- 変数名のルール (`$` で始まる・英字とアンダースコア) を言える

## 所要時間

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

## ドリル

| no | 内容 |
|---|---|
| 01 | 変数 1 つに代入して出力 |
| 02 | 変数 3 つに代入して順に出力 |
| 03 | 変数の中身を後から書き換える |

## 採点

```bash
php scripts/grade.php topics/hello/ch05-variables/drill/01-assign/
```

## 関連チャプター

- [`ch02-write-program`](../ch02-write-program/) — `echo` の基本 (このチャプターの前提)
- [`ch06-strings`](../ch06-strings/) — 変数と文字列を組み合わせる次の章
- [`ch07-numbers`](../ch07-numbers/) — 変数に数値を入れて計算する

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 1 / Chapter 5
  目的: 変数に値を入れて echo で取り出せる状態にする
  扱わない: 文字列展開 "{$var}" (ch06) / 数値計算 (ch07以降) / 配列 (後の章)
  読み上げ時間目安: 3 分半〜4 分
  ※ ここでは変数の取り出しは "." 連結だけで行う。"$name" 展開は ch06 で扱う
-->

# 変数

Lesson 1 / Chapter 5

---

## 変数とは「値に名前を付ける箱」

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

- `$name` という箱に `"太郎"` を入れた
- `echo $name;` でその中身を取り出して出力
- 同じ値を何度も使うときに便利

---

## 代入の書き方

```php
<?php
$message = "おはよう";
$age = 20;
?>
```

- 形は **`$変数名 = 値;`**
- 左が箱の名前、右が中に入れる値
- 文字列も数値も入れられる
- 文の最後の `;` を忘れない

---

## 変数名のルール

```php
<?php
$user_name = "花子";    // OK: 英字とアンダースコア
$age2 = 25;              // OK: 2文字目以降は数字も可
// $2age = 25;           // NG: 数字から始められない
// $user-name = "x";     // NG: ハイフンは使えない
?>
```

- 必ず `$` で始める
- 1 文字目は **英字かアンダースコア**
- 2 文字目以降は **英字・数字・アンダースコア**
- 大文字と小文字は別物 (`$name` と `$Name` は別)

---

## 取り出すときは `.` で連結できる

```php
<?php
$name = "太郎";
echo "こんにちは、" . $name . "さん\n";
?>
```

実行結果:

```
こんにちは、太郎さん
```

- `.` (ドット) で文字列と変数を **つなげる**
- 文字列の途中に変数を埋め込む書き方 (`"{$name}"`) は ch06 で扱う

---

## 中身は後から書き換えられる

```php
<?php
$score = 60;
echo $score . "\n";   // 60

$score = 80;
echo $score . "\n";   // 80
?>
```

- 同じ変数に **再代入** すると中身が上書きされる
- 直前の値は捨てられる

---

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

✅ `$変数 = 値;` で代入できる
✅ `echo $変数;` で取り出せる
✅ `.` で文字列と変数を連結できる
✅ 変数名のルールを守って書ける
✅ 変数の中身を後から書き換えられる

→ ドリルへ
