第6章 ユーザー定義関数 / 第1回 模擬試験
関数に関する次の記述のうち誤っているものはどれか。
PHPエンジンはプログラムファイル全体を読み込み、ファイル内のコマンドを実行する前にすべての関数定義を処理する。そのため関数は呼び出しの前でも後でも定義することができる。
関数宣言で指定する引数のデフォルト値は、リテラルのほか変数にすることもできる。
正解
複数の引数をとる関数において、オプション引数はすべての必須の引数の後に記述すべきである。
一つの`return`命令文は一つの値しか返せない。カンマ区切りにして複数の値を返すようなことはできない。
解説
関数の引数のデフォルト値には、リテラル値(数値・文字列など)、定数、`null`、配列などの定数式しか指定できず、他の変数を指定することはできません(構文エラーになります)。「変数にすることもできる」は誤りです。
他の選択肢が正しい理由は次の通りです。
・PHPはファイル全体をコンパイルしてから実行するため、トップレベルで定義された関数は呼び出しよりも後ろで定義されていても問題なく呼び出せます。
・オプション引数(デフォルト値を持つ引数)は、必須引数より後ろに書く必要があります。先に書くと構文エラーになります。
・`return`文で返せる値は1つだけです。複数の値をまとめて返したい場合は、配列や分割代入(リスト構文)を使います。
例:
```
function greet(string $name, string $suffix = 'さん') {
return "{$name}{$suffix}";
}
```
(参照: 独習PHP 第4版 第6章 関数 6.3節(デフォルト引数) ※本書の6章全般)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。
- PHPの関数の引数に関する次の記述のうち、正しいものはどれか。