型宣言 (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 つの両方に型
- 入口で
stringintが来るとわかる - 出口で
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 行ずつ出力してください。
repeat("ab", 3)repeat("ok", 2)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";のように戻り値を出力