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

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

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

1 + # Іменовані аргументи
2 +
3 + *Послідовність більше не має значення*
4 +
5 + - **Додано у версії:** PHP 8.0
6 + - **Що дає:** можливість передавати аргументи в функції і методи, вказуючи їх імена, а не лише значення.
7 +
8 + ## В чому суть
9 +
10 + До PHP 8 доводилось або пам’ятати точну послідовність аргументів, або постійно підглядати в сигнатуру методу щоб не помилитися який параметр йде за яким. Або в разі, якщо потрібно передати останній з кількох необовʼязкових параметрів, доводилося передавати всі.
11 +
12 + З іменованими аргументами можна передавати тільки потрібні параметри — за іменем та ще й в будь-якому порядку.
13 +
14 + ## Переваги
15 +
16 + - код стає більш самодокументованим — видно, що означає кожен аргумент;
17 + - не треба передавати купу непотрібних параметрів лише щоб змінити останній;
18 + - менше ризику переплутати порядок;
19 + - легше рефакторити код — старі виклики не ламаються, якщо змінено послідовність параметрів.
20 +
21 + ## Реальні приклади
22 +
23 + ```php
24 + function subscribe(
25 + string $email,
26 + ?string $name = null,
27 + ?string $language = 'uk',
28 + bool $doubleOptIn = true,
29 + ?string $source = null,
30 + ?string $tag = null,
31 + bool $sendWelcomeLetter = true,
32 + )
33 + { /* ... */ }
34 +
35 + // до 8.0 треба передати всі, навіть непотрібні ❌
36 + subscribe('alex@example.com', null, 'uk', true, null, null, false);
37 +
38 + // після 8.0 можна обмежитися потрібними ✅
39 + subscribe('alex@example.com', sendWelcomeLetter: false);
40 +
41 + // або навіть передати аргументи в довільному порядку
42 + subscribe('alex@example.com', sendWelcomeLetter: false, tag: 'promo2025');
43 + ```
44 +
45 + Решта параметрів беруться з дефолтів, і код читається як специфікація виклику методу.
46 +
47 + ### Приклад із фреймворку (Symfony)
48 +
49 + ```php
50 + protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse
51 + { /* ... */ }
52 +
53 + //....
54 + return $this->redirectToRoute(
55 + route: 'user.profile',
56 + status: 301,
57 + parameters: ['id' => $user->getId()]
58 + );
59 + ```
60 +
61 + Порядок аргументів не має значення, головне — зрозуміло, що ти задаєш.
62 +
63 + :::warning
64 + Варто зазначити, що не треба без необхідності змінювати порядок аргументів лише тому, що PHP це дозволяє. Якщо бачиш в коді такі місця — краще відрефактор їх і поверни природну послідовність параметрів.
65 +
66 + IDE, наприклад PhpStorm, зазвичай підсвічує такі виклики не дарма — це підказка, що час навести лад.
67 + :::
68 +
69 + ### Виклик API або SDK
70 +
71 + ```php
72 + $client->sendMessage(
73 + to: '380501234567',
74 + text: 'Привіт 👋',
75 + channel: ChannelsEnum::TELEGRAM,
76 + );
77 + ```
78 +
79 + Кожен аргумент одразу видно без коментарів і документації.
80 +
81 + ## Висновок
82 +
83 + > Іменовані аргументи — це конфігураційний стиль виклику функцій, який робить код читабельним і безпечним для змін.
84 + > Більше не потрібно прокидати купу null, щоб дістатися до потрібного параметра.
85 +
86 + Якщо функція має більше трьох параметрів — ти знаєш що робити.
87 +
88 + ← [Попередня: DateTimeImmutable](/articles/from-tg/series/php-can-do/datetime-immutable) · [Уся серія](/articles/from-tg/series/php-can-do) · [Наступна: Enums →](/articles/from-tg/series/php-can-do/enums)
89 +
90 + ---
91 +
92 + *Вперше опубліковано в Telegram-каналі [«Створений щоб помирати»](https://t.me/php_while_true/83) 23.10.2025.*