Іменовані аргументи (PHP 8.0) дозволяють передавати аргументи за іменем параметра, а не лише за позицією.
// Позиційно: що означає true? а 0?
htmlspecialchars($text, ENT_QUOTES, 'UTF-8', false);
// Іменовано
htmlspecialchars($text, double_encode: false);
str_pad(string: 'x', length: 5, pad_type: STR_PAD_LEFT);
Переваги:
- Читабельність для булевих прапорців і «магічних» чисел:
new Invoice(paid: true, sendEmail: false)замістьnew Invoice(true, false). - Пропуск необов'язкових параметрів: передати лише останній, не перелічуючи значення за замовчуванням для всіх попередніх.
- Будь-який порядок: іменовані аргументи можна передавати не в порядку оголошення.
- Разом з constructor promotion дають зручні value objects і DTO:
new Address(city: 'Київ', street: 'Хрещатик').
Правила:
- Спершу позиційні, потім іменовані:
f(1, b: 2)- так;f(a: 1, 2)- ні. - Один параметр не можна передати двічі.
- Невідоме ім'я - помилка.
- Для variadic-параметрів (
...$args) іменовані аргументи збираються в масив з рядковими ключами.
Застереження для авторів бібліотек: з іменованими аргументами назва параметра стає частиною публічного API. Перейменування $str на $string у новій версії зламає код, що викликав функцію іменовано. Тому в бібліотеках назви параметрів змінюють так само обережно, як і назви методів.