採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

型宣言 (type hints)

テクノロジ系 / function (関数定義・引数・return・型宣言)

型宣言 (type hints)

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 の共用体型で「複数の型」を表せる

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 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

採点

php scripts/grade.php topics/function/ch05-type-hints/drill/01-typed-add/

ヒント

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

ドリル 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
-----

採点

php scripts/grade.php topics/function/ch05-type-hints/drill/02-typed-string/

ヒント

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