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.*