dedlfix: Sinn Interfaces?

Beitrag lesen

Tach!

Die Klasse Hund unten nutzt das Interface IHaustier. Aber trotzdem muss man nochmals dieselbe Funktion in der Klasse aufführen bzw. schreiben.
Mehr Sinn würde es für mich machen, wenn die Funktion im Interface schon etwas "macht" und man in der jeweiligen Funktion nicht nochmals die Funktion schreiben muss.

Wenn sie schon etwas machen soll, dann kannst du ganz normal erben, eine abstrakte Klasse mit einer konkreten Methode nehmen oder auch Traits ab PHP 5.4. Ich kann auch noch einen anderen Vergleich bemühen: Ein Interface ist nur der Arbeitsvertrag, in dem drinsteht, was du zu tun hast. Und nun musst du dich hinsetzen und diesen Punkt im Vertrag mit Leben füllen. Der Vertrag macht das logischerweise nicht für dich.

Vielleicht ist das Beispiel mit dem Namen unglücklich gewählt. Das sieht ja so aus, als ob das immer die Eigenschaft name abgreift. Das wäre etwas für eine Elternklasse. Ein Interface kommt eher dann zum Einsatz, wenn Klassen keine gemeinsame Basis haben aber trotzdem gemeinsame Mitglieder haben sollen. Beispielsweise könntest du einen Programmteil haben, der sich um die Persistenz von Dingen kümmert, also um deren dauerhafte Speicherung. Der muss mit viel Dingen zurechtkommen und nicht nur mit solchen mit gemeinsamer Basisklasse. Jede Klasse hat andere Anforderungen, welche Eigenschaften persistiert werden sollen und welche nicht. Zudem hat ja jede Klasse ihre eigenen Eigenschaften, die die Basisklasse nicht kennen kann. Wie kann nun der Persistenzteil diese unterschiedlichen und unabhängigen Objekte sichern? Nehmen wir an, das soll in serialisierter Form geschehen, dann erstellst du ein Interface ISerializable mit dem Methodennamen serialize() (den Rückweg lass ich mal außen vor). Jede Klasse, die persistiert werden kann, implementiert nun dieses Interface und diese Methode. Der Persistenzteil nimmt nur Dinge vom Typ ISerializable entgegen und weiß, dass er davon $ding->serialize() aufrufen kann, woraufhin er als Ergebnis die serialisierten Daten des Objekts bekommt. Vom Rest hat er keine Ahnung - muss er auch nicht.

dedlfix.