OOP: Абстрактные классы и методы
Glossary overview

OOP: Абстрактные классы и методы

Абстрактный класс — нельзя создать объект напрямую:

abstract class Block {
    // Готовый код — одинаков для всех
    public static function registerHooks(): void { ... }

    // Дырка — каждый наследник заполняет сам
    abstract public static function renderBlock(...): void;
}

new Block()      → ошибка ❌ (abstract)
new CardsBlock() → работает ✓ (конкретный класс)

Суть

abstract — это контракт. Block — это не конкретный блок, это чертёж для всех блоков. PHP не скомпилирует наследника, если он не реализовал все abstract-методы.

А вот абстрактный метод. Тела нет — только сигнатура. Это дырка, которую каждый наследник обязан заполнить.

abstract public static function renderBlock(
    array $block,
    string $content,
    bool $is_preview,
    int|string $post_id
): void;

Если в наследнике не реализуем этот метод, то получим ошибку.

CardsBlock не пишет registerHooks, registerBlock, enqueueScripts, addStyleToQueue — он их наследует из Block. Пишет только:

  • Два свойства: $blockTitle$blockName
  • Один метод: renderBlock() — то что было abstract

Что было бы БЕЗ abstract class

// CardsBlock.php — 80+ строк вместо 28
class CardsBlock {
    public static function registerHooks(): void {
        // ← копипаста 15 строк из Block.php
    }
    public static function registerBlock(): void {
        // ← копипаста 10 строк
    }
    public static function enqueueScripts(): void {
        // ← копипаста 18 строк
    }
    public static function renderBlock(...): void {
        // ← уникальный код
    }
}

// ProsConsBlock.php — 110+ строк вместо 58
class ProsConsBlock {
    public static function registerHooks(): void {
        // ← та же самая копипаста
    }
    public static function registerBlock(): void {
        // ← та же самая копипаста
    }
    // ... и так 15 раз
}