OOP: Интерфейсы
Glossary overview

OOP: Интерфейсы

Интерфейс в PHP – это абстрактный тип, который определяет набор публичных методов и их сигнатур, обязательных к реализации классом, подключающим его через implements, без предоставления собственной реализации этих методов.

Пример

interface Hookable
{
    public static function registerHooks(): void;
}

Это контракт: любой класс, который написал implements Hookableгарантирует что у него есть метод registerHooks(). Кода внутри нет — только обещание.

Должны реализовать этот метод в классе:

abstract class Block implements Hookable {
    public static function registerHooks(): void
    {

        add_action('acf/init', [static::class, 'registerBlock']);
        }
    }
}

В нашем плагине очень важно чтобы некоторый классы имели метод registerHooks.

// Plugin.php
public static function loadHookableClasses(array $classes): void
{
    array_walk($classes, fn($item) => $item::registerHooks());
}

И вызываем:

// в главном файле плагина метод init
self::loadHookableClasses([
    InLinksShortcode::class,    
    GradeTableBlock::class,     
    PostsWidget::class,        
    HowToModule::class,         
    PartnerLink::class,         
]);

Эта функция не знает и не хочет знать — блок это, шорткод или виджет. Она знает одно: у каждого есть registerHooks(), потому что все они implements Hookable.

Получается мы передаем наши классы, и для всех них вызываем registerHooks.

Важные нюансы

  • Интерфейс не может иметь обычные свойства.
  • Интерфейс не может иметь реализацию методов.
  • В интерфейсе нельзя объявить protected или private методы. Это будет ошибка. Можно только public.
  • Можно реализовать несколько интерфейсов:
class Service implements Logger, Cacheable, JsonSerializable