Іменовані аргументи
Послідовність більше не має значення
- Додано у версії: PHP 8.0
- Що дає: можливість передавати аргументи в функції і методи, вказуючи їх імена, а не лише значення.
В чому суть
До PHP 8 доводилось або пам’ятати точну послідовність аргументів, або постійно підглядати в сигнатуру методу щоб не помилитися який параметр йде за яким. Або в разі, якщо потрібно передати останній з кількох необовʼязкових параметрів, доводилося передавати всі.
З іменованими аргументами можна передавати тільки потрібні параметри — за іменем та ще й в будь-якому порядку.
Переваги
- код стає більш самодокументованим — видно, що означає кожен аргумент;
- не треба передавати купу непотрібних параметрів лише щоб змінити останній;
- менше ризику переплутати порядок;
- легше рефакторити код — старі виклики не ламаються, якщо змінено послідовність параметрів.
Реальні приклади
function subscribe(
string $email,
?string $name = null,
?string $language = 'uk',
bool $doubleOptIn = true,
?string $source = null,
?string $tag = null,
bool $sendWelcomeLetter = true,
)
{ /* ... */ }
// до 8.0 треба передати всі, навіть непотрібні ❌
subscribe('alex@example.com', null, 'uk', true, null, null, false);
// після 8.0 можна обмежитися потрібними ✅
subscribe('alex@example.com', sendWelcomeLetter: false);
// або навіть передати аргументи в довільному порядку
subscribe('alex@example.com', sendWelcomeLetter: false, tag: 'promo2025');
Решта параметрів беруться з дефолтів, і код читається як специфікація виклику методу.
Приклад із фреймворку (Symfony)
protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse
{ /* ... */ }
//....
return $this->redirectToRoute(
route: 'user.profile',
status: 301,
parameters: ['id' => $user->getId()]
);
Порядок аргументів не має значення, головне — зрозуміло, що ти задаєш.
Варто зазначити, що не треба без необхідності змінювати порядок аргументів лише тому, що PHP це дозволяє. Якщо бачиш в коді такі місця — краще відрефактор їх і поверни природну послідовність параметрів.
IDE, наприклад PhpStorm, зазвичай підсвічує такі виклики не дарма — це підказка, що час навести лад.
Виклик API або SDK
$client->sendMessage(
to: '380501234567',
text: 'Привіт 👋',
channel: ChannelsEnum::TELEGRAM,
);
Кожен аргумент одразу видно без коментарів і документації.
Висновок
Іменовані аргументи — це конфігураційний стиль виклику функцій, який робить код читабельним і безпечним для змін. Більше не потрібно прокидати купу null, щоб дістатися до потрібного параметра.
Якщо функція має більше трьох параметрів — ти знаєш що робити.
← Попередня: DateTimeImmutable · Уся серія · Наступна: Enums →
Вперше опубліковано в Telegram-каналі «Створений щоб помирати» 23.10.2025.