可変長引数の動作がよくわかりません

2020年6月30日
ユーザー
function sum(...$numbers)
{
  $total = 0;
  foreach ($numbers as $number) {
    $total += $number;
  }
  return $total;
}

sumの仮引数は ...$numbers になっていますがこれは $numbers という配列がきたら展開して引数にしますよと言う意味に感じます。そして関数内では 

$numbers as $number

となっていることから実は展開せずに配列そのもので利用しています。ですが関数実行の実引数は 

echo sum(1, 2, 3, 4, 6) . PHP_EOL;

のように個々の数字を渡しています。もし$numbers が配列を想定しているなら

echo sum([1, 2, 3, 4, 6]) . PHP_EOL;

のように渡すべではないでしょうか?やってみるとエラーになりますし

echo sum(...[1, 2, 3, 4, 6]) . PHP_EOL;

$q = [1, 2, 3, 4, 6, 9];
echo sum(...$q) . PHP_EOL;

ではうまくいくのでやはり配列ではなく複数のコンマ区切りの数字のようです。この辺の挙動が理解に苦しみます。噛み砕いて教えて下さい。よろしく願いします。

この回答を見るにはプレミアムサービスへの登録が必要です

プレミアムサービスとは?