Интерфейс работает как контракт.Если класс реализует интерфейс, другой код, который использует этот класс, теперь знает, что он поддерживает определенные функции.
Лучший пример интерфейса в PHP - это интерфейс Iterator.
Преимущество интерфейсов заключается в том, чточто классы могут реализовать несколько.«Расширение» не позволяет этого.Это означает, что подкласс может реализовывать интерфейс, но его родитель не должен.
Читать шаблоны проектирования.Многое из этого вы найдете покрытым, и у вас больше никогда не будет сомнений, в каких случаях это имеет смысл.«Начните с разработки шаблонов» Я подумал, что это хорошая книга, очень хорошо написанная.Хотя они используют Java в своих примерах, большинство вещей очень применимо в PHP.
У меня есть еще один реальный сценарий.
Наше приложение всегда создает исключения вездевсякий раз, когда возникает ошибка.Каждый тип исключения получает свой собственный класс.Примером этого является исключение RecordNotFound.
Если исключения не обнаружены, существует блок исключений верхнего уровня, который выглядит примерно так:
try {
// Do everything in the app!
} catch (Exception $e) {
// draw a good error page
}
В некоторых случаях требуются исключениябыть сопоставленным с определенными кодами состояния HTTP, такими как 404 (не найден).Поэтому у нас есть этот интерфейс:
interface HTTPException {
function getHTTPCode();
}
любое исключение, независимо от того, насколько глубоко в дереве наследования теперь можно реализовать этот интерфейс и генерировать определенный код состояния HTTP.
Я даже создал интерфейсы, без каких-либо методов.Я оставлю это вам, чтобы попытаться найти причину, почему это может иметь смысл.