# ch02 — 引数を受け取る

Source: https://php-school.pages.dev/topics/function/ch02-arguments/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: 関数
Level: L2

Reference (official): https://www.php.net/manual/ja/language.functions.php

## 本文

# ch02 — 引数を受け取る

## 概要

引数 (argument) は **関数の外から中へ値を渡すための入口** だ。引数がない関数は毎回まったく同じ出力しかできないが、`function greet($name)` のように仮引数を 1 つ用意するだけで、`greet("太郎")` `greet("花子")` のように呼び出しごとに違う値を扱えるようになる。「同じ処理だが対象が違う」場面をすべて 1 つの関数に統合できるのが、関数を引数化する最大の動機になる。

PHP では `function f($x) { ... }` の `$x` を **仮引数**、`f(10)` の `10` を **実引数** と呼ぶ。仮引数は左から順に対応付けられ、複数並べる場合は `($a, $b, $c)` のようにカンマで区切る。実引数を渡し忘れると基本的にエラーになるので、定義側の引数の数と呼び出し側の値の数は揃える必要がある。

このチャプターで覚えておくべき落とし穴は **スコープ**。仮引数 `$name` は関数の `{ }` の中だけで有効で、外から `echo $name;` しても未定義扱いになる。「関数の中の世界と外の世界は別」という感覚を、この段階で掴んでおくと後の `$this` (class トピック ch05) や static (class-advanced トピック ch06) の理解が一段速くなる。

## 学習目標

- `function f($x) { ... }` で引数 1 個を受け取れる
- `function f($a, $b) { ... }` で複数引数を並べられる
- 呼び出し時に渡した値が関数の中で使える

## 所要時間

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

## ドリル

| no | 内容 |
|---|---|
| 01 | `greet($name)` を 3 人分呼ぶ |
| 02 | `add($a, $b)` で合計を出力する |
| 03 | `describe($name, $age, $city)` を作る |

## 採点

```bash
php scripts/grade.php topics/function/ch02-arguments/drill/01-one-arg/
```

## 関連チャプター

- [`ch01-define-call`](../ch01-define-call/) — 関数の定義と呼び出し (前提)
- [`ch03-return`](../ch03-return/) — `return` で値を返す
- [`ch04-default-args`](../ch04-default-args/) — 引数のデフォルト値
- [`ch05-type-hints`](../ch05-type-hints/) — 引数に型を付ける

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 7 / Chapter 2
  目的: function f($x) { ... } の形で引数を受け取り、呼び出し時に値を渡せるようにする
  扱わない: 戻り値 (ch03) / デフォルト引数 (ch04) / 型宣言 (ch05) / 配列引数 (ch06) / 可変長引数 (扱わない)
  読み上げ時間目安: 3 分半〜4 分
-->

# 引数を受け取る

Lesson 7 / Chapter 2

---

## 引数がないと「同じ出力しかできない」

```php
<?php
function greet() {
    echo "こんにちは 太郎\n";
}

greet();
```

- これだと「太郎」しか挨拶できない
- 名前を変えるたびに関数を書き直すのは無駄
- **引数** で名前を外から受け取れるようにする

---

## `function f($x) { ... }` で引数を 1 個受け取る

```php
<?php
function greet($name) {
    echo "こんにちは " . $name . "\n";
}

greet("太郎");
greet("花子");
```

実行結果:

```
こんにちは 太郎
こんにちは 花子
```

- `($name)` の `$name` が **引数**
- 呼び出すとき `greet("太郎")` の `"太郎"` が `$name` に入る

---

## 引数は何個でも並べられる

```php
<?php
function add($a, $b) {
    echo $a + $b . "\n";
}

add(1, 2);  // 3
add(10, 5); // 15
```

- カンマで区切って `($a, $b, $c, ...)` のように書く
- 呼び出すときも同じ数だけ値を渡す

---

## 引数の名前は関数の中だけで有効

```php
<?php
function greet($name) {
    echo "こんにちは " . $name . "\n";
}

greet("太郎");
echo $name; // ← 関数の外なのでエラー (未定義)
```

- 関数の `{ }` の中で受け取った値を使う
- 外から `$name` は見えない (スコープ)

---

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

✅ `function f($x) { ... }` で引数 1 個を受け取れる
✅ `function f($a, $b) { ... }` で複数引数を並べられる
✅ 呼び出し時に渡した値が関数の中で使える
✅ 引数の値を変えて何度でも呼び出せる

→ ドリルへ
