← 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

Property Promotion

Менше коду — легше читати

  • Додано у версії: PHP 8.0
  • Що дає: можливість оголошувати властивості класу прямо в конструкторі — без дублювання й шаблонного коду.

Чому це крутіше за старий підхід

  • не потрібно окремо описувати властивості та привласнювати їх значення у конструкторі;
  • менше шуму — одразу видно структуру класу;
  • ідеально підходить для DTO, запитів, VO, команд, конфігів тощо.

Фактично це "data class" по-PHPшному — коротко, без додаткових бібліотек чи автогенерації коду.

Реальний приклад застосування

// ❌ Раніше
readonly class Product {
    public string $sku;
    public string $name;
    public float $price;

    public function __construct(string $sku, string $name, float $price) {
        $this->sku = $sku;
        $this->name = $name;
        $this->price = $price;
    }
}

// ✅ Тепер
readonly class Product {
    public function __construct(
        public string $sku,
        public string $name,
        public float $price,
    ) {}
}

У коді це зменшує бойлерплейт майже втричі, а клас стає самоочевидним.

Де це реально корисно

  • DTO у запитах/відповідях API;
  • командні об’єкти в CQRS;
  • значення, які описують одну сутність без поведінки (Value Object);
  • Symfony-форми, коли треба швидко пробросити дані.
class CreateUserCommand {
    public function __construct(
        public string $email,
        public string $password,
        public bool $isAdmin = false,
    ) {}
}

Висновок

Property Promotion — не просто синтаксичний цукор, це офіційний перехід до декларативного стилю. Код виглядає лаконічніше, без зайвих рядків.


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