Где лучше объявлять код методов — в интерфейсе или в классе php?

Давайте разберемся, где лучше объявлять код методов — в интерфейсе или в классе php?

В PHP есть несколько вариантов организации кода, и выбор между интерфейсом и классом зависит от того, что именно вы объявляете.

Ключевое различие

Интерфейс — это только контракт: сигнатуры методов без реализации (в классическом понимании).
Класс — это реализация: содержит тела методов.

php

 

Что где объявлять

В интерфейсе объявляют:

  • Публичные сигнатуры методов — имя, параметры, тип возврата.

  • Константы (начиная с PHP 8.1 — и final-константы).

  • Начиная с PHP 8.0 — можно объявлять public, static, а также использовать private/protected методы (для внутреннего использования в интерфейсе).

php

 

В классе объявляют:

  • Тела (реализацию) методов.

  • Приватные и защищённые методы — вспомогательная логика, которую не нужно раскрывать наружу.

  • Свойства (в интерфейсах свойств нет).

  • Методы, не входящие в контракт.

php

 

Правила выбора

СитуацияГде объявлять
Нужен общий контракт для нескольких классовИнтерфейс
Есть общая реализация для нескольких классовАбстрактный класс
Логика специфична для одного классаОбычный класс
Метод — деталь реализацииКласс (private/protected)
Метод — часть публичного APIИнтерфейс + реализация в классе
Нужна гибкость (несколько реализаций, DI, тесты)Интерфейс

Почему не «всё в интерфейс»

  1. Интерфейс — публичный контракт. Если положить туда всё, вы свяжете себя обязательством поддерживать эти методы во всех реализациях.

  2. Нет свойств и состояния. Всё, что связано с данными объекта, живёт в классе.

  3. Нарушение ISP (Interface Segregation Principle). Лучше несколько маленьких интерфейсов, чем один огромный.

  4. Тестирование. Узкий интерфейс проще мокать.

Практический паттерн

php

 

Итог

  • Интерфейс = «что умеет объект» (контракт, публичный API).

  • Класс = «как именно он это делает» (реализация + приватные детали).

  • Объявляйте метод в интерфейсе, только если он является частью контракта, который должны соблюдать другие классы. Всё остальное — в классе.

Щелкните ниже, чтобы поставить оценку!
Всего: 0 В среднем: 0

Написать комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *