phpbar.de logo

Mailinglisten-Archive

[php] OOP in PHP 5: Interfaces vs. abstrakte Klasse

[php] OOP in PHP 5: Interfaces vs. abstrakte Klasse

Yannik Hampe yannik at cipher-code.de
Sam Okt 13 22:32:44 CEST 2007



Hannes H. wrote:
> Guten Abend, Wissende!
> 
> Ich möchte für eine Gruppe von Klassen vorgeben, dass sie eine
> bestimmte Methode implementieren müssen - wozu es zwei Möglichkeiten
> gibt:
> 
> a) Interface
> b) abstrakte Klasse die abgeleitet wird
> 
> Ich möchte allerdings nur vorgeben, dass die Klassen diese bestimmte
> Methode besitzt, allerdings möchte ich nicht die Parameter vorgeben.

Wieso willst du das tun? Wenn du ein interface hast, dann hast du den 
Vorteil, dass du das Verhalten kennst, aber deswegen nicht unbedingt 
weisst, wie es zu dem Verhalten kommt. So kannst du du die 
Implementierung ändern ohne den Code zu ändern, der das Interface verwendet.
Wenn du von einer Klasse ableitest, hast du den Vorteil, dass du 
Vorteil, dass du viele Klassen, die von einer Hauptklasse abgeleited 
sind als eine einfache Klasse verwenden kannst und du nicht für jede 
Klasse ein if hast.

Wenn du die Parameter nicht fest vor gibst, dann gehen dir die Vorteile 
doch verloren. Wenn du ein Interface hast, weisst du zwar, dass es eine 
Klasse, die es implementiert die Methode hat, aber du kannst trotzdem 
noch nicht sagen, wie diese zu verwenden ist.

Was hast du davon?
> 
> Gibt es hierfür irgend eine Möglichkeit? Mir fällt leider nichts ein ...

Ja, prüf einfach mit method_exists(), ob deine Methode existiert statt 
mit instanceof. Solange du nur eine Funktion vorgeben willst ändert sich 
dadurch sowieso nichts. Bei mehreren Funktionen wird es dann was mehr 
code ;-).
In Sprachen ohne automatische Typenkonvertierungen sähe das natürlich 
anders aus. Da würdest du dann
SomeInteface $var =new SomeClass();
$var->call();
In Php hast du den Vorteil nicht. Allerdings hast du in php den Nachteil 
auch garnicht erst, der den Vorteil nötig macht ;-).

Naja... Sonst sag doch erstmal, was du eigentlich vor hast. Ist sonst 
schwer dir zu helfen ;-).

> 
> Liebe Grüße,
> Hannes Halenka

Yannik

php::bar PHP Wiki   -   Listenarchive