新しいPHPの構文に関する覚え書きとして、公式サイトから抜粋。
PHP: 関数の引数 – Manual
https://www.php.net/manual/ja/functions.arguments.php#functions.variable-arg-list
PHP 5.6 以降では、引数リストに … トークンを含めることで、その関数が可変長の引数を受け取ることを示せます。引数は、指定した変数に配列として渡されます。
… を使った、可変長引数へのアクセス
<?php function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc; } echo sum(1, 2, 3, 4); ?>
関数を呼び出すときに … を使うと、配列変数や Traversable クラスを引数リストに含めることができます。
引数での … の使用例
<?php function add($a, $b) { return $a + $b; } echo add(...[1, 2])."\n"; $a = [1, 2]; echo add(...$a); ?>
通常の引数を、… の前に指定することもできます。この場合は、通常の引数リストにマッチしなかったのこりの引数が … による配列に追加されます。… トークンの前に、タイプヒントを付加することもできます。タイプヒントがある場合、… が取り込むすべての引数はそのヒントに従わなければいけません。
タイプヒントつきの可変長引数
<?php function total_intervals($unit, DateInterval ...$intervals) { $time = 0; foreach ($intervals as $interval) { $time += $interval->$unit; } return $time; } $a = new DateInterval('P1D'); $b = new DateInterval('P2D'); echo total_intervals('d', $a, $b).' days'; // これは失敗します。null は DateInterval オブジェクトではないからです。 echo total_intervals('d', null); ?>