К чему применять интерфейс?

Почти всегда получается, что я использую интерфейс и классы его реализующие. Но вот когда вдруг появляется необходимость в абстрактном классе, сразу затуп к чему применять интерфейс: к реализующему классу:
class FooService extends AbstractFooService implements FooServiceInterface {}


или в этом случае уже к абстрактному классу:
abstract class AbstractFooService implements FooServiceInterface {}

class FooService extends AbstractFooService {}


На основе чего делать выбор? Мне все еще нравится первый вариант. Но каких-то за или против у меня нет.
А вообще конечно стараюсь избегать абстрактных классов.
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Cheypnow
Интерфейс описывает контракт.
Абстрактный класс описывает базовое поведение, общее для нескольких потомков.
В чем проблема?
Ответ написан
Комментировать
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Не стоит бояться абстрактных классов, это может быть очень удобным, интерфейс не содержит реализации, не может иметь свойств, только константы. Так же интерфейс только публичные методы имеет, когда абстрактный класс может содержать какие то приватные методы, где будет содержаться общая логика
Я за второй вариант
Ответ написан
Комментировать
@shevchenko__k
Помогаю новорожденным web программистам
первый вариант правильный. я не пойму в чем проблема
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы