- Wann sollte
implement
oderextend
sollte verwendet werden? - Was sind einige Beispiele aus der Praxis?
Ist das richtig?
Das Implementieren scheint eine Möglichkeit zu sein, um zu erzwingen, dass bestimmte Methoden in einer Klasse vorhanden sind und dass diese Methodenfunktionsaufrufe ordnungsgemäß formatiert sind. Das Implementieren ist jedoch keine Möglichkeit, Variablen oder "Einstellungen" an die Klasse zu übergeben?
Erwartetes reales Szenario: Ich habe eine E-Commerce-Plattform mit mehreren Zahlungsklassen, die alle dem gleichen Design folgen. Wenn eine neue Zahlungsklasse hinzugefügt werden soll, ist es wirklich einfach, dem definierten Design der zu folgen, interface
um sicherzustellen, dass alle Teile von Anfang an vorhanden sind.
Durch das Erweitern von Klassen erbt die erweiterte (untergeordnete?) Klasse alles von ihrer übergeordneten Klasse, mit Ausnahme von Methoden und Variablen, die als private
? Deklariert sind .
Erwartetes reales Szenario: Ich habe eine Klasse sessions
mit zwei untergeordneten Klassen namens sessioncookies
und aufgerufen databasesessions
. sessioncookies
und databasesessions
erben zusammen eine Reihe von gegenseitigen Konfigurationsoptionen von ihren übergeordneten Sitzungen, wodurch es einfach ist, eine Konfigurationsoption zu ändern, um alle Arten der eventuellen Speicherung von Besucherdaten zu beeinflussen.
Antworten:
Vererbung ist nützlich, um die Menge an Code zu reduzieren, die Sie neu schreiben. Wenn Sie mehrere Klassen mit einigen gemeinsamen Methoden oder Feldern haben, können Sie diese Methoden und Felder nicht immer wieder definieren, sondern in eine Basisklasse zerlegen und jede der untergeordneten Klassen diese Basisklasse erweitern lassen.
Schnittstellen (und
implements
) sind nützlich, wenn Sie ein gemeinsames Protokoll für das Verhalten einer Gruppe von Objekten definieren möchten. Beispielsweise möchten Sie möglicherweise festlegen, dass vergleichbare Objekte auf Gleichheit und Hash usw. verglichen werden können.Die Verwendung der Vererbung ist letztendlich eine Designentscheidung. Halten Sie Ausschau nach Fällen, in denen Sie dieselben Methoden in mehreren Klassen definieren. Dies sind hervorragende Fälle, in denen Sie diese Methoden in eine Basisklasse zerlegen können. Gleiches gilt für Klassen, die einige der gleichen Merkmale aufweisen: Sie können die Konsistenz gewährleisten, indem Sie diese Merkmale in eine Schnittstelle einfügen, die von diesen verwandten Klassen implementiert werden soll.
Vererbung ist ein großes Konzept in OOP, das weit über PHP hinausgeht. Ich empfehle Ihnen, den Wikipedia-Artikel über Vererbung und vielleicht Designmuster der Viererbande zu lesen .
Ich glaube, Ihr Verständnis von Vererbung ist hauptsächlich richtig. Der nächste Schritt wäre, es in der Produktion zu verwenden.
quelle
Implementieren:
Schnittstellen sind abstrakte Klassen, daher können Sie nur Dinge deklarieren. Eine Klasse implementiert eine Schnittstelle. Sie können mehrere Schnittstellen implementieren .
Erweitern:
Sie erweitern Klassen, wenn Sie eine spezifischere Version einer Klasse wünschen .
Beispiel:
Sowohl Kamel als auch Hund sind Tiere, daher erweitern sie die
Animal
Klasse. Aber nur der Hund ist eine bestimmte Art vonAnimal
der auch eine sein kannPet
quelle