OOP: checklist
Glossary overview

OOP: checklist

Плавный переход на ООП

Не переписывай всё сразу. Двигайся поэтапно:

Шаг 1 — Добавь composer.json с PSR-4 autoload, создай папку src/

Шаг 2 — Возьми одну фичу (например, шорткод) и вынеси в класс. Всё остальное пусть остаётся процедурным

Шаг 3 — Следующая фича — ещё один класс. И так по одному

Шаг 4 — Когда классов станет 5+, появится понимание, что у них есть общее — тогда сделай интерфейс или базовый класс

Частые ошибки 

“Классы ради классов” — класс с одним методом, который вызывается один раз. Это не ООП, это лишний файл. Если функции достаточно — оставь функцию.

Наследование ради наследования — class Dog extends Animal extends LivingThing. В реальности наследование нужно редко. В WordPress чаще всего хватает интерфейса.

Слишком раннее абстрагирование — не пиши “универсальный фреймворк” на первом плагине. Сначала напиши 2-3 плагина с дублированием, потом увидишь что реально повторяется и вынесешь.

Паттерны ради паттернов — не нужен Factory, Strategy, Observer на каждый чих. Начни с группировки функций в классы — уже 80% пользы.

Конфигурацию — отдельно от логики

Вместо хардкода полей внутри класса:

// Плохо — мешаем данные и логику
class MyMetabox {
    public function register() {
        add_meta_box(...);
    }
    
    public function render() {
        echo '<input name="field_1" ...>';  // захардкожено
        echo '<input name="field_2" ...>';
        echo '<select name="field_3" ...>';
    }
}

Правильно так:

// Хорошо — конфигурация отдельно
// config/post-metabox.php
return [
    ['name' => 'field_1', 'type' => 'text', 'title' => 'Заголовок'],
    ['name' => 'field_2', 'type' => 'checkbox', 'title' => 'Скрыть'],
];

// src/MyMetabox.php
class MyMetabox {
    public function __construct(private array $fields) {}
    
    public function render() {
        foreach ($this->fields as $field) {
            // универсальный рендер по типу
        }
    }
}

// plugin.php
new MyMetabox(include __DIR__ . '/config/post-metabox.php');

Добавить новое поле = добавить строку в массив, не трогая PHP-класс.