# ch03 — return で戻り値を返す

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

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

## 本文

# ch03 — return で戻り値を返す

## 概要

関数は **引数で値を受け取り、`return` で値を返す**。`echo` は「画面にそのまま出す」のに対して、`return` は「呼び出し元に値を渡して、その後どう使うかは呼び出し側に任せる」という違いがある。`return` で値を返せるようになると、関数の結果を変数に代入したり、別の関数の引数に渡したり、計算式の中に埋め込んだりできるようになり、関数を **部品** として組み立てる発想が生まれる。

PHP の `return` は数値・文字列・真偽値・配列・オブジェクトなど何でも返せる。`return` が実行されるとそこで関数は終了し、それより後ろの行は実行されない。`return` を 1 度も書かない関数は暗黙的に `null` を返すので、「値を返したつもりが何も返っていない」状態にハマったら `return` の付け忘れをまず疑う。

このチャプターでつまずきやすいのは **`echo` と `return` の混同**。例えば `function square($x) { echo $x * $x; }` と書くと結果は画面に出るが、`$y = square(3);` としたとき `$y` は `null` のままになる。「画面に出すこと」と「値を返すこと」を別物として区別する感覚を、3 つのドリルで身に付ける。

## 学習目標

- `return` で関数から値を返せる
- 戻り値を変数に代入したり、`echo` で出力したりできる
- 数値・文字列・真偽値を返せる

## 所要時間

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

## ドリル

| no | 内容 |
|---|---|
| 01 | `square($x)` で二乗を返す |
| 02 | `full_name($a, $b)` で氏名を連結して返す |
| 03 | `is_even($n)` で真偽を返す |

## 採点

```bash
php scripts/grade.php topics/function/ch03-return/drill/01-square/
```

## 関連チャプター

- [`ch02-arguments`](../ch02-arguments/) — 引数で値を受け取る (前提)
- [`ch04-default-args`](../ch04-default-args/) — 引数のデフォルト値
- [`ch05-type-hints`](../ch05-type-hints/) — 戻り値の型を宣言する
- [`ch06-array-arg`](../ch06-array-arg/) — 配列を返す関数

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 7 / Chapter 3
  目的: return で関数から値を返し、呼び出し側で受け取れるようにする
  扱わない: デフォルト引数 (ch04) / 型宣言 (ch05) / 配列引数 (ch06) / クラス (L8)
  読み上げ時間目安: 3 分半〜4 分
-->

# return で戻り値を返す

Lesson 7 / Chapter 3

---

## echo するだけの関数は使い回しにくい

```php
<?php
function square($x) {
    echo $x * $x . "\n";
}

square(3); // 9
```

- 中で `echo` してしまうと「画面に出す」だけで終わる
- 計算結果を他で **再利用** したいときに困る
- **戻り値** にすれば、呼び出し側で自由に扱える

---

## `return` で値を返す

```php
<?php
function square($x) {
    return $x * $x;
}

$result = square(3);
echo $result . "\n"; // 9
```

- `return 値;` で関数から値を返す
- 呼び出し側で `$result = square(3);` のように受け取る
- `return` を実行すると関数はそこで **終わる**

---

## 戻り値はそのまま `echo` にも渡せる

```php
<?php
function square($x) {
    return $x * $x;
}

echo square(4) . "\n";   // 16
echo square(5) . "\n";   // 25
```

- 変数に代入せずに `echo` の中に直接書ける
- 戻り値を別の関数の引数に渡すこともできる

---

## 戻り値の型は何でもよい

```php
<?php
function full_name($first, $last) {
    return $first . " " . $last;   // 文字列を返す
}

function is_big($n) {
    return $n >= 100;              // 真偽値を返す
}

echo full_name("太郎", "山田") . "\n"; // 太郎 山田
var_dump(is_big(50));                 // bool(false)
```

- 数値・文字列・真偽値・配列など、何でも返せる
- `return` を書かない関数の戻り値は `null`

---

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

✅ `return 値;` で関数から値を返せる
✅ 戻り値を変数で受け取れる
✅ 戻り値を `echo` に直接渡せる
✅ 数値・文字列・真偽値を返せる

→ ドリルへ
