Значення за замовчуванням роблять параметр необов'язковим:
function paginate(array $items, int $perPage = 15, int $page = 1): array
{
return array_slice($items, ($page - 1) * $perPage, $perPage);
}
paginate($items); // 15 на сторінку, перша сторінка
paginate($items, 50);
paginate($items, page: 3); // іменований аргумент пропускає $perPage
Правила:
- Значення за замовчуванням - константний вираз: літерал, константа,
new(з PHP 8.1), масив. Не виклик функції. - Необов'язкові параметри йдуть після обов'язкових. Обов'язковий параметр після необов'язкового - deprecated.
nullза замовчуванням вимагає nullable-типу:?string $name = null.
Variadic-параметр ...$name збирає всі решту аргументів у масив:
function sum(int ...$numbers): int
{
return array_sum($numbers);
}
sum(1, 2, 3); // 6
sum(...[1, 2, 3]); // розпаковка масиву в аргументи
- Може бути лише останнім параметром.
- Тип застосовується до кожного елемента:
int ...$numbers. - Іменовані аргументи, що не відповідають жодному параметру, потрапляють у variadic з рядковими ключами.
Пастки:
- Змінюване значення за замовчуванням через
new(Options $o = new Options()) створює новий об'єкт при кожному виклику - на відміну від Python, тут проблеми спільного стану немає. - Багато необов'язкових параметрів - запах. Якщо їх п'ять, краще об'єкт параметрів (DTO) чи кілька окремих методів.
- Булевий прапорець за замовчуванням (
bool $force = false) робить виклики незрозумілими - іменований аргумент рятує:delete(force: true).