Vor-und Nachteile von Vererbung in php
Kann mir jemand sagen was sind die Wichtigsten Vorteile und Nachteile der Vererbung/multi-level-inheritence in php.Vielen Dank im Voraus 🙂
- php.net/manual/en/language.oop5.inheritance.php
- was ist der Grund, downvote meine Antwort?
- Für Ihre Antwort oder Frage. ( Ich habe nicht downvoted deine Antwort)
- ich bin nicht auf Sie, sondern jemand downvote meine Antwort, ohne Grund 🙁 (wie, was falsch ist in meiner Frage)
- Sie noch nicht beantwortet haben, noch etwas, wie kann jemand downvote
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorteile:-
Einer der wichtigsten Vorteile der Vererbung ist die Minimierung der Menge an doppelten code in einer Anwendung, die durch die gemeinsame Nutzung von code zwischen mehreren Unterklassen. Wo entsprechende code existiert in zwei Verwandte Klassen, die Hierarchie kann in der Regel umgestaltet werden, um verschieben Sie den gemeinsamen code an eine gemeinsame Oberklasse. Auch dies führt tendenziell zu einer besseren Organisation des Codes und kleinere, einfachere Zusammenstellung Einheiten.
Vererbung kann auch der code der Anwendung flexibler zu ändern, weil Klassen Erben von einer gemeinsamen Superklasse austauschbar verwendet werden können. Wenn der Rückgabetyp einer Methode ist Superklasse
Wiederverwendbarkeit -- Anlage für öffentliche Methoden der Basis-Klasse ohne umschreiben der gleiche
Erweiterbarkeit-Erweiterung der Basis-Klasse Logik als pro business-Logik von der abgeleiteten Klasse
Daten verstecken-base Klasse kann entscheiden, dass einige Daten privat, so dass es nicht verändert werden kann, indem die abgeleitete Klasse
Überschreiben--Mit der erbschaft, wir werden in der Lage sein, um das überschreiben der Methoden der Basisklasse, so dass sinnvolle Umsetzung der Basis-Methode der Klasse gestaltet werden kann in der abgeleiteten Klasse.
Nachteile:-
Einer der wichtigsten Nachteile der Vererbung ist die erhöhte Zeit/Aufwand es kostet, das Programm zu springen, durch alle Ebenen von Klassen überladen. Wenn eine bestimmte Klasse hat zehn Ebenen der Abstraktion über es, dann wird es sich im wesentlichen um zehn Sprünge ausführen, durch eine Funktion definiert, die in jeder dieser Klassen
Größte Nachteil der Verwendung von Vererbung ist, dass die zwei Klassen (Basis-und geerbten Klasse) bekommen eng gekoppelt.
Das bedeutet, man kann nicht verwendet werden, die unabhängig von einander.
Auch mit der Zeit, während der Wartung hinzufügen neuer Funktionen, die sowohl Basis-als auch abgeleitete Klassen sind erforderlich, um geändert werden. Wenn eine Signatur der Methode geändert wird, dann werden wir die betroffenen in beiden Fällen (erbschaft & Komposition)
Wenn eine Methode gelöscht, in der "super-Klasse" oder ein Aggregat, dann haben wir zu re-Faktor bei der Verwendung dieser Methode.Hier können Dinge ein wenig kompliziert werden, im Falle der Vererbung, weil unsere Programme noch kompilieren, aber die Methoden, die von der Unterklasse nicht mehr überschreiben werden superclass-Methoden. Diese Methoden werden unabhängige Methoden in Ihrem eigenen Recht.
Nicht sicher, ob dies ist der richtige Ort für diese Art von Fragen, aber okay.
Lassen Sie uns sagen, Sie haben einige grundlegende Klasse
Base
, der jede andere Klasse erweitert. In der Basis können Sie definieren, Dinge, die alle anderen Klassen können, z.B. Verbindung zu einer MySQL-Datenbank, so dass alle Klassen können$this->mysqli
und nicht brauchen, um es erklärt.Baute ich eine E-Commerce-cms, wo ich es auf diese Weise. Ich habe auch definiert eine Methode namens
getLink()
die prüft, ob es eine MethodegetUrl()
undgetTitle()
. Diese Methoden definiert sind, die in jedem Kind-Klasse (in meinem CMSProduct
,Category
...). Nehmen wir dasProduct
Klasse, es sind auch die MethodengetUrl()
undgetTitle()
aber die MethodegetLink()
ist in derBase
denen dieProduct
erstreckt. Ich benutze die MethodegetLink()
fast überall so, wenn ich nicht schreiben wollen, es in jeder Klasse, die ich gerade Schreibe es in dieBase
und ich kann es benutzen.Weiteres Beispiel aus meinem CMS: in der
Base
Konstrukt, das ich habe überprüft, ob die Eingabe mit dem Namenglobal_update
eingereicht wurde. Es wird überprüft, ob$this->table
und$this->id
definiert wurde, und wenn ja, update der Datenbank mit den Daten. Sonst hätte ich definieren müssen Sie einen handler für jede update-Aktion. Auf diese Weise habe ich global für jede Klasse und Schreibe ich eigenen Handler nur für komplexere Formen.Ich hoffe das ist verständlich, wenn nicht, zu kommentieren und Fragen.