第6章 ユーザー定義関数 / 第2回 模擬試験
次のコードの実行結果として正しいものはどれか。 ```php function greet(string $name = "Guest"): string { return "Hello, {$name}!"; } print greet(); print greet("Alice"); ```
Hello, !Hello, Alice!
Hello, Guest!Hello, Alice!
正解
エラーが発生する
Hello, Guest!Hello, Guest!
解説
引数を省略して`greet()`を呼び出すと、パラメータのデフォルト値`"Guest"`が使われ`"Hello, Guest!"`が返ります。`greet("Alice")`のように明示的に引数を渡すと、その値が優先され`"Hello, Alice!"`が返ります。
例:
```
function greet(string $name = "Guest"): string {
return "Hello, {$name}!";
}
print greet(); // Hello, Guest!
print greet("Alice"); // Hello, Alice!
// 連続して出力すると: Hello, Guest!Hello, Alice!
```
デフォルト引数は「値が渡されなかった場合にのみ」使われる点、明示的に`null`を渡した場合はデフォルト値は使われず`$name`が`null`になろうとする点(型宣言が`?string`などnull許容でない場合はエラーになります)にも注意してください。
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.3.1節 引数の既定値 p.279〜280)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。