Вопрос проверяет знание интерфейсов и понимание контрактного подхода в объектно-ориентированном программировании.
Да, класс может реализовывать несколько интерфейсов одновременно. Для этого используется ключевое слово implements с перечислением интерфейсов через запятую. Класс обязан реализовать все методы всех интерфейсов. Это позволяет объединять несколько ролей в одном классе.
Интерфейсы в PHP описывают контракты поведения, а не реализацию. Один класс может соответствовать сразу нескольким контрактам.
Определение:
Интерфейс — это набор методов без реализации, которые класс обязуется реализовать полностью.
interface Loggable {
public function log(string $message): void;
}
Класс может реализовать сколько угодно интерфейсов.
interface Loggable {
public function log(string $message): void;
}
interface Storable {
public function save(): void;
}
class Service implements Loggable, Storable {
public function log(string $message): void {
// ...
}
public function save(): void {
// ...
}
}
Нужно реализовать все методы всех интерфейсов
Сигнатуры методов должны совпадать
Нельзя ослаблять модификаторы доступа (public обязателен)
Один объект — несколько ролей
Гибкая архитектура
Удобство для DI-контейнеров
Подмена реализаций в тестах
Интерфейсы:
не содержат состояния
не ограничивают иерархию
лучше масштабируются
PHP позволяет реализовывать несколько интерфейсов одновременно. Это основной способ описывать поведение объектов и строить гибкую архитектуру без жёсткого наследования.