docs: English JsonRpcBundle docs, REST and MCP Bundle sections, package cards
uk/articles/from-tg/series/php-can-do/property-promotion.md
новий файл +70
−0
1
+
# Property Promotion
2
+
3
+
*Менше коду — легше читати*
4
+
5
+
- **Додано у версії:** PHP 8.0
6
+
- **Що дає:** можливість оголошувати властивості класу прямо в конструкторі — без дублювання й шаблонного коду.
7
+
8
+
## Чому це крутіше за старий підхід
9
+
10
+
- не потрібно окремо описувати властивості та привласнювати їх значення у конструкторі;
11
+
- менше шуму — одразу видно структуру класу;
12
+
- ідеально підходить для DTO, запитів, VO, команд, конфігів тощо.
13
+
14
+
Фактично це "data class" по-PHPшному — коротко, без додаткових бібліотек чи автогенерації коду.
15
+
16
+
## Реальний приклад застосування
17
+
18
+
```php
19
+
// ❌ Раніше
20
+
readonly class Product {
21
+
public string $sku;
22
+
public string $name;
23
+
public float $price;
24
+
25
+
public function __construct(string $sku, string $name, float $price) {
26
+
$this->sku = $sku;
27
+
$this->name = $name;
28
+
$this->price = $price;
29
+
}
30
+
}
31
+
32
+
// ✅ Тепер
33
+
readonly class Product {
34
+
public function __construct(
35
+
public string $sku,
36
+
public string $name,
37
+
public float $price,
38
+
) {}
39
+
}
40
+
```
41
+
42
+
У коді це зменшує бойлерплейт майже втричі, а клас стає самоочевидним.
43
+
44
+
## Де це реально корисно
45
+
46
+
- DTO у запитах/відповідях API;
47
+
- командні об’єкти в CQRS;
48
+
- значення, які описують одну сутність без поведінки (Value Object);
49
+
- Symfony-форми, коли треба швидко пробросити дані.
50
+
51
+
```php
52
+
class CreateUserCommand {
53
+
public function __construct(
54
+
public string $email,
55
+
public string $password,
56
+
public bool $isAdmin = false,
57
+
) {}
58
+
}
59
+
```
60
+
61
+
## Висновок
62
+
63
+
> Property Promotion — не просто синтаксичний цукор, це офіційний перехід до декларативного стилю.
64
+
> Код виглядає лаконічніше, без зайвих рядків.
65
+
66
+
[Уся серія](/articles/from-tg/series/php-can-do) · [Наступна: Анонімні класи →](/articles/from-tg/series/php-can-do/anonymous-classes)
67
+
68
+
---
69
+
70
+
*Вперше опубліковано в Telegram-каналі [«Створений щоб помирати»](https://t.me/php_while_true/70) 15.10.2025.*