← Property Promotion

Ashterix

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