При использовании variadic-параметров в некоторых случаях нужно ограничить минимальное количество элементов. Это можно сделать с помощью проверки внутри метода:
public function eat(string ...$foods): voidНо можно избавится от проверки и ввести это ограничение другим способом:
{
if (empty($foods)) {
throw new LogicException('Need to eat something.');
}
// ...
}
public function eat(string $food, string ...$moreFood): voidПричём это будет работать как в классическом варианте:
{
$foods = [$food, ...$moreFood];
// ...
}
$pet->eat('apple', 'meat', 'bread');
Так и с помощью распаковки массива:$foods = ['apple', 'meat', 'bread'];Периодически использую этот подход на практике, позволяет задать дополнительные условия на уровне сигнатуры метода.
$pet->eat(...$foods);