Правильно ли я понимаю суть Интерфейсов в ООП?
Интерфейсы это как контракты. Т.е если класс реализует интерфейс, значит он исполняет наш контракт. Это удобно! Например, есть класс TaxCollector   , он принимает класс  реализующий интерфейс moneySource .  Допустим у нас есть сейчас только два класса (Businessman , Criminal), которые мы можем передавать в TaxCollector и каждый реализует getMoney.  Далее мы можем добавить еще дюжину и наш TaxCollector будет также хорошо работать с ними.  Для него ничего не изменится. А все потому, что интерфейс moneySource строго определен и включает метод getMoney. Остальное не важно. Любой из классов - Student, Man, Woman, Professor, Gigolo , которые поддерживают данный интерфейс  годятся для работы с TaxCollector. Это гарантируется интерфейсом  moneySource.
Не скажу за тонкости PHP , но в целом направление верное. Прежде всего интерфейс выполняет 2 роли, это интерфейс взаимодействия класса и апкастинг. Интерфейс взаимодействия это все публичные члены и методы класса в своей совокупности к которым можно обратиться, интерфейс структуризирует для всех классов один интерфейс взаимодействия, как человек выше говорил, по договору. Но это только малая часть преимуществ, основная сила это Апкаст, приведение от частного к общему. Грубо говоря вы назначили реализацию интерфейса классу, потом вы можете привести класс к интерфейсу, и обьявить тип интерфейса присвоив в переменную любой класс который будет иметь реализацию интерфейса, таким образом мы получаем очень динамическую систему которая может менять реализацию, манеру поведения, и много чего еще, без изменения в коде, по одному только интерфейсу взаимодействия. У вас 100500 классов, а обращаться вы к ним можете абсолютно одинаково, вам не нужно прописывать для каждого типа. для каждого другого обьекта вызов сугубо его методов.