概要
型宣言 (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 { ... }で引数と戻り値の型を宣言できるint・stringなどの基本型を引数に書ける- 戻り値の型は
): 型で関数定義の後ろに書く
ドリル
| no | 内容 |
|---|---|
| 01 | add(int $a, int $b): int を作る |
| 02 | repeat(string $s, int $n): 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ヒント
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
-----ヒント
function repeat(string $s, int $n): string { return str_repeat($s, $n); }echo repeat("ab", 3) . "\n";のように戻り値を出力