# ch01 — 関数を定義して呼び出す

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

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

## 本文

# ch01 — 関数を定義して呼び出す

## 概要

関数は **「処理にまとまった名前を付けて、何度でも呼び出せるようにする仕組み」** だ。挨拶や合計計算のように、同じコードを 2 回以上書きそうになったら、ほぼ間違いなく関数にまとめるサインになる。同じ処理を 1 か所に寄せておけば、後で文言や仕様が変わったときも 1 か所だけ直せばよく、コピペで散らばったコードを追いかける必要がなくなる。

PHP では `function 名前() { ... }` の形で関数を定義し、`名前()` の形で呼び出す。定義する位置はファイル内のどこでもよく、呼び出しより後ろに書いてもエラーにならない (関数はファイル読み込み時にまとめて登録される)。このチャプターでは引数も戻り値も持たない「もっとも素朴な関数」を題材に、定義と呼び出しのリズムを体に入れる。

この章でつまずきやすいのは **「関数を定義しただけで呼び出していない」** ケース。`function greet() { ... }` を書いただけでは何も実行されず、必ず `greet();` のように呼び出して初めて中身が走る。`function` キーワードと `{ }` ブロックの形を、まず確実に書けるところを目標にする。

## 学習目標

- `function 名前() { ... }` で関数を定義できる
- `名前()` で関数を呼び出せる
- 同じ処理を何度も書かずに済むメリットを実感する

## 所要時間

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

## ドリル

| no | 内容 |
|---|---|
| 01 | `greet()` を定義して 3 回呼ぶ |
| 02 | 2 つの関数を定義して順に呼ぶ |

## 採点

```bash
php scripts/grade.php topics/function/ch01-define-call/drill/01-define-call/
```

## 関連チャプター

- [`ch02-arguments`](../ch02-arguments/) — 関数に引数で値を渡す
- [`ch03-return`](../ch03-return/) — 関数から値を返す
- [`ch04-default-args`](../ch04-default-args/) — 引数のデフォルト値

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 7 / Chapter 1
  目的: function で関数を定義し、名前() で呼び出せるようにする
  扱わない: 引数 (ch02) / 戻り値 (ch03) / デフォルト引数 (ch04) / 型宣言 (ch05) / 配列引数 (ch06) / クラス (L8)
  読み上げ時間目安: 3 分半〜4 分
-->

# 関数を定義して呼び出す

Lesson 7 / Chapter 1

---

## 同じ処理を何度も書くとつらい

```php
<?php
echo "こんにちは\n";
echo "こんにちは\n";
echo "こんにちは\n";
```

- 3 回ならまだ良いが、10 回・100 回となると修正が大変
- 出力内容を変えるとき、全部の行を直す必要がある
- **関数** にまとめれば、1 箇所直すだけで済む

---

## `function 名前() { ... }` で関数を定義

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

- `function` の後に関数の **名前** を書く
- `()` の後の `{ ... }` の中に処理を書く
- 定義しただけでは **実行されない**

---

## `名前()` で関数を呼び出す

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

greet();
greet();
greet();
```

実行結果:

```
こんにちは
こんにちは
こんにちは
```

- 関数名の後に `()` を付けると **呼び出し**
- 呼び出した回数だけ、中の処理が実行される

---

## 複数の関数を定義できる

```php
<?php
function hello() {
    echo "Hello\n";
}

function bye() {
    echo "Bye\n";
}

hello();
bye();
```

- 1 つのファイルに何個でも関数を書ける
- 呼び出す順番は自由

---

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

✅ `function 名前() { ... }` で関数を定義できる
✅ `名前()` で関数を呼び出せる
✅ 同じ関数を何度も呼び出せる
✅ 1 ファイルに複数の関数を書ける

→ ドリルへ
