第6章 ユーザー定義関数 / 第5回 模擬試験
PHPの複合的な型宣言に関する次の記述のうち、正しいものはどれか。
`?int`という型宣言は、`int`型または`null`を許容することを意味する。
正解
`int|string`という型宣言は、PHPでは構文エラーになる。
型宣言は変数のプロパティに対してのみ使用でき、関数の引数には使用できない。
`?type`という記法は、PHP8では廃止された。
解説
`?int`のように型名の前に`?`を付けると、「その型(`int`)」または「`null`」のどちらかを許容する、null許容型(Nullable型)の宣言になります。`?int`は`int|null`と同じ意味です。
他の選択肢が誤りである理由は次の通りです。
・PHP 8.0以降、`int|string`のように`|`で複数の型をつないだ「union型」を型宣言に使用できます。構文エラーにはなりません。
・型宣言はクラスのプロパティだけでなく、関数・メソッドの引数や戻り値にも使用できます。
・`?type`という記法は、PHP8でも引き続き使用できるnull許容型の書き方です。「廃止された」は誤りです。
例:
```
function findUser(?int $id): ?string {
if ($id === null) {
return null;
}
return "User#{$id}";
}
```
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.1.6節 複合的な型宣言 p.266〜267)
関連する問題
- PHPの関数引数に関する次の記述のうち、誤っているものはどれか。
- 関数に関する次の記述のうち誤っているものはどれか。
- PHPの匿名関数とアロー関数に関する次の記述のうち、正しいものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $val = 'a'; $val = 'b'; print ('【A】' . $val); function func($val = 'c') { $val = 'd'; print ('【B】' . $val); global $val; print ('【C】' . $val); $val = 'e'; print ('【D】' . $val); $val = 'f'; } $val = 'g'; func($val); print ('【E】' . $val); ```
- PHPの変数のスコープに関する次の記述のうち、正しいものはどれか。