第6章 ユーザー定義関数 / 第5回 模擬試験
PHP 8.0で追加された名前付き引数に関する次の記述のうち、正しいものはどれか。
名前付き引数を使うと、`func(b: 2, a: 1)`のように引数の順序を気にせず渡せる。
正解
名前付き引数は、関数定義側で特別な宣言をしないと一切使用できない。
名前付き引数を使うと、デフォルト引数の一部だけを飛ばして指定することはできない。
名前付き引数はPHP7.4以前から存在する機能である。
解説
名前付き引数を使うと、`func(b: 2, a: 1)`のように「引数名: 値」の形式で渡すことで、関数定義の引数順序を気にせず値を渡せます。
例:
```
function greet(string $name, string $greeting = 'こんにちは') {
return "{$greeting}、{$name}さん";
}
echo greet(greeting: 'おはよう', name: 'Taro'); // 順序を入れ替えても正しく渡る
```
他の選択肢が誤りである理由は次の通りです。
・名前付き引数を使う際、関数を定義する側で特別な宣言をする必要はありません。通常通り定義された関数の引数名(仮引数名)が、そのまま呼び出し側で指定できる名前になります。
・名前付き引数の大きな利点の1つが、デフォルト値を持つ引数の一部だけを指定し、残りは省略してデフォルト値のまま使えることです。「一部だけを飛ばして指定することはできない」というのは誤りです。
・名前付き引数はPHP 8.0で新しく導入された機能です。「PHP7.4以前から存在する」は誤りです。
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.3.3節 名前付き引数 p.283〜284)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。