Іменовані аргументи

← Іменовані аргументи

Ashterix

docs: English JsonRpcBundle docs, REST and MCP Bundle sections, package cards

uk/articles/from-tg/series/php-can-do/named-arguments.md новий файл +92 −0

Іменовані аргументи

Послідовність більше не має значення

  • Додано у версії: 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, щоб дістатися до потрібного параметра.

Якщо функція має більше трьох параметрів — ти знаєш що робити.


Вперше опубліковано в Telegram-каналі «Створений щоб помирати» 23.10.2025.