ch05 6章中 5章目

ch05 — 型宣言

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch05 — 型宣言」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch05 — 型宣言」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch05 — 型宣言」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

型宣言 (type hint / type declaration) は 「この引数には何型の値が来るか」「この関数は何型の値を返すか」を関数の入り口と出口で明示する仕組み だ。function add(int $a, int $b): int { ... } のように書いておくと、文字列を渡したり戻り値を別の型にしたりすると即座にエラーになり、バグが本来の発生箇所からずっと離れて現れる事故を防げる。コードを後から読む人にとっても「何が入って何が出るか」がコメントなしで分かるドキュメントになる。

PHP では int float string bool array などの基本型に加えて、クラス名や null 許容 (?int) も型に書ける。戻り値の型は引数リストの後ろに ): 型 の形で付ける。型に合わない値が来たときの挙動は declare(strict_types=1); の有無で変わるが、本チャプターでは「とりあえず宣言を書く」習慣を作るところを目標にする。

PHP 8 では 共用体型 (union type) が導入され、function f(int|string $x): int|string のように「int か string のどちらか」と書けるようになった。なんでも受け付ける関数を作りたくなったとき、mixed で逃げる前に int|string のような具体的な共用体で意図を残せると、後から読むコードが格段に分かりやすくなる。

学習目標

  • function f(int $x): int { ... } で引数と戻り値の型を宣言できる
  • intstring などの基本型を引数に書ける
  • 戻り値の型は ): 型 で関数定義の後ろに書く

ドリル

no 内容
01 add(int $a, int $b): int を作る
02 repeat(string $s, int $n): string を作る

解説スライド 全 8 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. 型宣言 (type hints)

    Lesson 6 / Chapter 5

  2. ゴール

    function add(int $a, int $b): int {
        return $a + $b;
    }

    このように 引数と戻り値に型を書ける ようになる。

    ?int / int|string までを使えるところまで持っていく。

  3. なぜ型を書くのか

    // 型なし: 何を渡せばいいか不明
    function add($a, $b) { return $a + $b; }
    
    add("3", "5");   // → "35" ? 8 ? 動くけど怖い
    • 何が入って何が出るかが、 コメントなしで伝わる
    • バグが本来の発生箇所で即エラーになる
    • 後から読む人にとって ドキュメント になる
  4. 引数と戻り値に型を書く

    <?php
    function add(int $a, int $b): int {
        return $a + $b;
    }
    
    echo add(3, 5);    // 8
    • 引数: int $a のように 型 + 変数名
    • 戻り値: ): int を関数定義の後ろに付ける
    • 基本型 = int / float / string / bool / array
  5. 文字列を返す例

    <?php
    function repeat(string $s, int $n): string {
        return str_repeat($s, $n);
    }
    
    echo repeat("ab", 3);   // "ababab"
    • 引数 2 つ、 戻り値 1 つの両方に型
    • 入口で string int が来るとわかる
    • 出口で string が返るとわかる
  6. null を許す型: ?string

    <?php
    function find(int $id): ?string {
        if ($id === 1) return "alice";
        return null;        // 見つからなければ null
    }
    • ?string = 「string または null
    • 「見つからないことがある」 検索系の戻り値で頻出
  7. 共用体型: int|string (PHP 8+)

    <?php
    function f(int|string $x): int|string {
        if (is_int($x)) return $x * 2;
        return strtoupper($x);
    }
    
    echo f(5);      // 10
    echo f("hi");   // "HI"
    • int|string で「int か string のどちらか」
    • 「なんでも」 と思ったら mixed の前に共用体 を検討
    • 意図がコードに残るので保守性が上がる
  8. このチャプターでできるようになること

    function f(int $x): int { ... } で引数と戻り値に型を書ける ✅ 基本型 (int / string / bool / array 等) を引数に書ける ✅ ?string で null 許容を表現できる ✅ int|string の共用体型で「複数の型」を表せる

    → ドリルへ

1 / 8
📜 スライドを全部一気に読む(縦表示)

Lesson 6 / Chapter 5


ゴール

function add(int $a, int $b): int {
    return $a + $b;
}

このように 引数と戻り値に型を書ける ようになる。

?int / int|string までを使えるところまで持っていく。


なぜ型を書くのか

// 型なし: 何を渡せばいいか不明
function add($a, $b) { return $a + $b; }

add("3", "5");   // → "35" ? 8 ? 動くけど怖い
  • 何が入って何が出るかが、 コメントなしで伝わる
  • バグが本来の発生箇所で即エラーになる
  • 後から読む人にとって ドキュメント になる

引数と戻り値に型を書く

<?php
function add(int $a, int $b): int {
    return $a + $b;
}

echo add(3, 5);    // 8
  • 引数: int $a のように 型 + 変数名
  • 戻り値: ): int を関数定義の後ろに付ける
  • 基本型 = int / float / string / bool / array

文字列を返す例

<?php
function repeat(string $s, int $n): string {
    return str_repeat($s, $n);
}

echo repeat("ab", 3);   // "ababab"
  • 引数 2 つ、 戻り値 1 つの両方に型
  • 入口で string int が来るとわかる
  • 出口で string が返るとわかる

null を許す型: ?string

<?php
function find(int $id): ?string {
    if ($id === 1) return "alice";
    return null;        // 見つからなければ null
}
  • ?string = 「string または null
  • 「見つからないことがある」 検索系の戻り値で頻出

共用体型: int|string (PHP 8+)

<?php
function f(int|string $x): int|string {
    if (is_int($x)) return $x * 2;
    return strtoupper($x);
}

echo f(5);      // 10
echo f("hi");   // "HI"
  • int|string で「int か string のどちらか」
  • 「なんでも」 と思ったら mixed の前に共用体 を検討
  • 意図がコードに残るので保守性が上がる

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

function f(int $x): int { ... } で引数と戻り値に型を書ける ✅ 基本型 (int / string / bool / array 等) を引数に書ける ✅ ?string で null 許容を表現できる ✅ int|string の共用体型で「複数の型」を表せる

→ ドリルへ

この章で取り組む 演習問題の流れ (2ステップ)
  1. 01 ドリル 01 — add(int $a, int $b): int を作る README.md starter.php answer.php
  2. 02 ドリル 02 — repeat(string $s, int $n): string を作る README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — add(int $a, int $b): int を作る

問題

引数を 2 つ受け取り、その合計を返す関数 add を、型宣言付きで定義してください。

  • 引数 $a$b の型は int
  • 戻り値の型は int

定義した後、add(1, 2)add(10, 20)add(100, 250) の戻り値を 1 行ずつ出力してください。

期待される出力:

3
30
350

ヒント

  • function add(int $a, int $b): int { return $a + $b; }
  • echo add(1, 2) . "\n"; を 3 回書く

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

ドリル 02 — repeat(string $s, int $n): string を作る

問題

文字列 $s$n 回繰り返した文字列を返す関数 repeat を、型宣言付きで定義してください。

  • 引数 $s の型は string
  • 引数 $n の型は int
  • 戻り値の型は string

定義した後、次の 3 件の戻り値を 1 行ずつ出力してください。

  1. repeat("ab", 3)
  2. repeat("ok", 2)
  3. repeat("-", 5)

期待される出力:

ababab
okok
-----

ヒント

  • function repeat(string $s, int $n): string { return str_repeat($s, $n); }
  • echo repeat("ab", 3) . "\n"; のように戻り値を出力

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(2問)

  1. ドリル 01 — add(int $a, int $b): int を作る

    README.md starter.php answer.php

  2. ドリル 02 — repeat(string $s, int $n): string を作る

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます