第6章 ユーザー定義関数 / 第5回 模擬試験
次のコードの実行結果として正しいものはどれか。 ```php function sum(...$nums) { return array_sum($nums); } $values = [1, 2, 3, 4]; print sum(...$values); ```
10
正解
4
1234
エラーが発生する
解説
呼び出し側で`sum(...$values)`のように`...`を付けると、配列`$values`(`[1, 2, 3, 4]`)の各要素が個別の引数として展開され、`sum(1, 2, 3, 4)`を呼び出したのと同じことになります。関数定義側の可変長引数`...$nums`は、渡された引数をまとめて配列`[1, 2, 3, 4]`として受け取ります。`array_sum()`でこの配列の合計を求めると`1+2+3+4=10`になります。
例:
```
function sum(...$nums) {
return array_sum($nums);
}
$values = [1, 2, 3, 4];
print sum(...$values); // 10
```
「呼び出し側でのアンパック(`...$values`)」と「定義側での可変長引数(`...$nums`)」という同じ`...`記法の異なる2つの使われ方が、この1つのコードの中に両方登場している点に注目すると理解しやすくなります。
(参照: 独習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の変数のスコープに関する次の記述のうち、正しいものはどれか。