Moin!
Es tut mir leid gestehen zu müssen, dass ich den Sinn von Interfaces immernoch nicht verstanden habe. Bleiben wir mal bei ArrayAccess. Dort werden 4 abstrakte Methoden definiert, dann wird eine Klasse erstellt welche die 4 Methoden nochmal definiert inkl. auszuführenden Code der Methoden. Wenn ich das Interface jetzt weglasse funktioniert alles genauso gut. Ich versteh einfach nicht wozu das Interface und überhaupt wozu nur "leere" Methoden.
Ok, deine Äußerung lässt mich erkennen, dass ich ein schlechtes Beispiel gewählt habe.
Deshalb in Ergänzung zu dedlfix:
Das konkret vorliegende Interface ArrayAccess wendest du ja lediglich an, d.h. deine Klasse implementiert die dadurch geforderten Funktionen.
WENN du es implementierst, dann kannst du sowas machen:
$dataObject = new KlasseDieArrayAccessImplementiert();
$dataObject[0] = "foo";
$dataObject[1] = "bar";
echo $dataObject[0]; // Schreibt: "Magic: foo", um zu demonstrieren, dass es kein Array ist.
Wenn ArrayAccess nicht implementiert ist, dann funktioniert das so nicht.
PHP prüft bei Array-Zugriffsschreibweise intern, ob die Variable ein Array ist, oder ein Objekt, welches ArrayAccess implementiert hat. In letzterem Fall ruft es die implementierten Methoden auf, um festzustellen, ob der gewünschte Array-Index verfügbar ist, und fragt den Wert ab - Schreibzugriffe analog.
Dieses Beispiel ist schlecht gewählt gewesen, weil es lediglich die nützliche Anwendung eines hartcodierten, mit PHP-Sonderfunktionalität ausgestatteten Interfaces demonstriert, aber nicht den Nutzen von selbstgeschriebenen Interfaces, die leider ohne solche Sonderfunktionen auskommen müssen.
Du sagst es dient der Identifikation von Klassen die grob umrissen gleiche Aufgaben erledigen. Wozu muss ich die identifizieren können? Irgendwie will es nicht in meinen Kopf. Gibt es keine Beispiele wo ich zwingend ein Interface brauch?
Nein, zwingend ist in der Programmierung nichts, weil man alles auch anders lösen könnte. Nur zweckmäßig ist es nicht unbedingt.
Einen Nachteil haben diese Seiten: Das dort erwähnte Test-Framework "SimpleTest" ist leider hoffnungslos veraltet, es supportet noch PHP 4 und nutzt deshalb selbst noch keine Features von PHP 5. Der Platzhirsch an dieser Stelle ist eindeutig "PHPUnit". Aber die Prinzipien der beiden Frameworks sind absolut vergleichbar, deshalb ist es keine vertane Zeit, wenn du dir die zwei Links mal zu Gemüte führst.
Frameworks? :( Ich hasse Frameworks. Ich verbringe aus Erfahrung normalerweise mehr Zeit damit mich in ein Framework einzuarbeiten als es gleich selbst zu erledigen. Ich werde mir die Links natürlich trotzdem erstmal anschauen. Danke!
Mit dieser Argumentation müsstest du den Weizen für dein Brot auch selbst anbauen, weil zum Bäcker fahren und dort Kaufen zu kompliziert wäre. ;)
- Sven Rautenberg