В случае если класс подключает к себе интерфейсы, но реализует не все методы в них, он автоматически становится абстрактным.
Листинг 2 Интерфейсы и абстрактные классы. Файл abstract.php
Трейты
Начиная с версии 5.4, в РНР введен дополнительный инструмент для повторного использования кода в классах - трейты. В отличие от интерфейсов, трейты содержат не абстрактные методы, а общие фрагменты классов.
Если мы объявляем интерфейсы Seo и Tаg и заставляем все классы реализовывать методы этих интерфейсов, наверняка среди реализаций будет довольно много повторяющегося кода. Для решения этой проблемы как раз и предназначены трейты. Реализовав один раз функциональность sео-блока и тегов Tag, их можно подмешивать в любой класс, в котором данная функциональность может потребоваться.
Объявляются трейты при помощи ключевого слова trait, после которого следует название трейта и в фигурных скобках его содержимое. Для включения одного или нескольких трейтов в класс используется ключевое слово use (листинг 3).
Листинг 3 Использование трейтов. Файл traits.php
Результатом работы скрипта из листинга 3 будут следующие строки:
Seo:: keywords
Tag::tags