Nie wiem jaka jest różnica między interfejsami w PHP, ale mniej więcej mogę Ci powiedzieć czym są interfejsy w javie. Najpierw formalna definicja:
-Interfejs to zestaw metod które musi zaimplementować klasa implementująca interfejs. O zmiennych nie będę mówił, bo w javie istnieje możliwość deklarowania zmiennych w interfejsie ale zostaną i tak one zadeklarowane jako final.
Interfejsy pełnią ważną rolę w szeroko pojętej abstrakcji i w programowaniu obiektowym, wykorzystując polimorfizm. Przykład ze zwierzętami i komendą "daj_głos" gdy klasy takie jak Pies, Kot czy Papuga implementują interfejs posiadający tą metodę.
Weźmy bardziej praktyczny przykład, czyli Listy w javie - dynamiczne struktury danych. Jak każda z dynamicznych struktur danych, ma możliwość dodawania elementów do list. I tutaj mamy kilka możliwości: może to być na zasadzie tablic (jak np
http://www.vogella.com/tutorials/JavaDatastructureList/article.html ) albo na zasadzie listy, gdzie i-ty element ma jako pole referencję do i+1 elementu. I tutaj pojawiają nam się zarówno plusy jak i minusy każdej z implementacji.
I tutaj pojawia nam się idea interfejsu. Lepiej stworzyć zestaw metod (dodawanie, usuwanie, pobieranie elementu itd) i zaimplementować te metody w dwóch klasach i jako typ zmiennej podawać nazwę interfejsu (tutaj List) a tworząc obiekty podawać jego implementacje (ArrayList i LinkedList). W chwili, gdy będziesz coś chciał zmienić implementacje metod, będzie się to sprowadzało do zmiany obiektu implementującego dany interfejs, jedna linijka kodu zamiast szukać w kilku miejscach gdzie masz coś zmienić.
Innym przykładem może być baza danych. Istnieją takie bazy danych jak MySQL, h2, mongoDB etc. jedna może być lepsza od drugiej w niektórych sytuacjach, jeżeli zostanie podjęta decyzja o zmianie bazy danych - nie trzeba zmieniać reszty kodu, wystarczy zmienić implementację interfejsu.
PS: Tak jak mówiłem, nie jest to PHP jednak w OOP według mnie dużej róznicy między interfejsami w PHP czy Javie nie powinno być (może się różnić tym, że np w Javie nie ma możliwości dziedziczenia wielokrotnego, a w innym języku może być więc implementowanie interfejsów może zastąpić dziedziczenie wielokrotne)