Tach!
[Irgendwas]
Du beschreibst mal wieder was ganz anderes als das, was man in der OOP - wie sie bei PHP und anderen Sprachen vorkommt - unter einem Interface versteht. Dort ist ein Interface eine Vereinbarung, dass dasjenige Teil (zumeist eine Klasse), welches das Interface implementiert, die im Interface definierten Eigenschaften und Methode besitzt.
Beispiel sei ein IList-Interface, das Eigenschaften und Methoden definiert, die eine Liste benötigt, wie Hinzufügen und Enfernen von Elementen und der Zugriff auf einzelne Elemente. Andere Teile eines Programms oder eines Frameworks bieten beispielsweise Vorgänge an, die mit Listen arbeiten, aber ansonsten keine konkreten Anwndungsfälle abdecken. Als Beispiel nehme ich mal Sortieren. Der Sortierer soll universell mit Listen arbeiten, aber ansonsten soll es ihm egal sein, welche weiteren fachlichen Dinge in den Listenklassen implementiert sind. Bei stark typisierten Systemen müsste man sonst einen Sortierer schreiben, der genau diese spezialisierte Klasse verwenden kann. Stattdessen möchte der Sortierer etwas vom Typ IList übergeben bekommen und dann ist es egal, was die Klassen noch so alles können - sprich: welchen konkreten Typ sie haben, sie müssen nur alle Mitglieder des Interfaces implementiert haben.
Um auf die Frage des OP einzugehen: Es ist nicht wirklich sinnvoll, bestimmte Eigenheiten von Programmiersprachen einer bestimmten Komplexitätsstufe von Anwendungsfällen zuordnen zu wollen. Wichtiger ist es, die Konzepte generell zu kennen und für einen bestimmten konkreten Anwendungsfall ihre Eigenschaften zu bewerten, welche Vorteile und Nachteile sie für den Fall haben und ob der Einsatz effektiv (Ziel erreichend) und effizient (mit geringstmöglichem (oder zumindest vertretbarem) Aufwand) ist. Dazu gibt es aber keine Formel, das muss man mit Hilfe von gesammelter Erfahrung entscheiden.
dedlfix.