第6章 ユーザー定義関数 / 第5回 模擬試験
PHPの引数のアンパック(`...`演算子)に関する次の記述のうち、正しいものはどれか。
`...`演算子を使うと、配列の要素を個別の引数として関数に展開して渡すことができる。
正解
`...`演算子は文字列を連結するための演算子である。
`...`演算子は関数の戻り値を複数返すための構文である。
`...`演算子は、可変長引数の定義にのみ使用でき、呼び出し側では使用できない。
解説
`...`演算子は、関数呼び出しの「引数の位置」で配列変数の前に付けることで、配列の各要素を個別の引数として展開(アンパック)して関数に渡すことができます。
例:
```
function sum($a, $b, $c) {
return $a + $b + $c;
}
$nums = [1, 2, 3];
echo sum(...$nums); // sum(1, 2, 3) と同じ意味。結果は6
```
他の選択肢が誤りである理由は次の通りです。
・文字列の連結には`.`(ドット)演算子を使います。`...`は配列の展開のための演算子です。
・関数から複数の値を返したい場合は、配列で返す、または`list()`/分割代入で受け取る、といった方法を使います。`...`演算子自体が複数の戻り値を実現する構文ではありません。
・`...`演算子は、関数定義側での可変長引数の宣言(`function foo(...$args)`)だけでなく、関数呼び出し側での配列の展開(`foo(...$array)`)の両方に使用できます。
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.3.7節 「...」演算子による引数のアンパック p.288)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。