Verständnis der PHP-Mehrfachvererbung

小云云
Freigeben: 2023-03-21 22:56:01
Original
2236 Leute haben es durchsucht

PHP-Mehrfachvererbung ist sehr verwirrend. Die Mehrdeutigkeit und der Diamond of Death-Vererbungsbaum sind an beiden Enden klein und in der Mitte groß. Verwenden Sie daher stattdessen Merkmale (klarer und klarer, wiederverwendbarer Code wird erreicht, und die flache Methode ist klarer und Unklarheit gelöst (welche Methode muss verwendet werden, sonst wird ein Fehler gemeldet)

Gestern Abend habe ich mit G eine Frage besprochen, ob ich die Mehrfachvererbung verwenden sollte Das liegt daran, dass mich die Mehrfachvererbung extrem beeinträchtigt hat. Ich denke, das ist etwas, das man verachten sollte. Der Hauptgrund ist, dass es meiner Meinung nach sehr leicht zu Verwirrung führen kann, sowohl in der Programmierung als auch im Design, aber ich weiß es nicht Vieles über seine Besonderheiten. Das liegt daran, dass ich von dieser Sache erfahren habe und sie sofort nach der Prüfung weggeworfen habe Öffentliche Kommentare dazu: Die Vorteile liegen auf der Hand, sind einfach, klar und begünstigen die Wiederverwendung. Obwohl die Mehrfachvererbung die Wiederverwendung erleichtern kann, kann es dennoch zu einer großen Anzahl doppelter Codes kommen Beispielsweise erwähnt Baidu Encyclopedia ein Beispiel dafür, dass eine Katze sowohl von der Säugetierklasse als auch von der Cartoon-Klasse erben kann, sodass keine Notwendigkeit besteht, die Eigenschaften und Methoden der Cartoon-Klasse neu zu schreiben Der erste Grund ist die Mehrdeutigkeit. Wenn es in zwei Basisklassen Methoden mit demselben Namen gibt, muss beim Aufrufen der Unterklasse angegeben werden, aus welcher Basisklasse diese Methode stammt Sie sind verwirrt, wenn die Klasse A B und C ableitet und B und C gemeinsam D ableiten. Diese Art von Vererbungsbaum hat einen anschaulichen Namen: Diamant-Vererbungsbaum (DOD: Diamond Of Death). „Tod“ ist im wahrsten Sinne des Wortes ein sehr schlechtes Wort, und es ist wahr, dass es zwei Möglichkeiten gibt, Daten zu organisieren, abgesehen von der Mehrdeutigkeit Wie viele scheinbar doppelte Methoden und wie viele Datenelemente mit demselben Namen es in D gibt! Verwenden Sie virtuelle Basisklassen (virtuelle Vererbung), stellen Sie sicher, dass Sie sich der Details jeder Klasse vollständig bewusst sind, und stellen Sie sicher, dass Sie die Nebenwirkungen virtueller Basisklassen kennen (virtuelle Vererbung).“ Hier ist ein weiteres Vokabular, vtable (in C++, Ich bin mir nicht sicher, ob PHP es hat, ich habe es nicht auf Baidu gefunden, aber es sollte dort sein.) Jede Klasse mit virtuellen Funktionen hat so etwas. Es zeichnet tatsächlich die Funktionszeiger aller virtuellen Funktionen auf Das heißt, es ist die Startposition des Funktionszeiger-Arrays. Wenn eine Objektinstanz dieser Klasse TheSecondFun aufruft, wird sie beispielsweise im zweiten Element des Arrays aufgezeichnet Um die Funktion auszuführen, wird dieses Verhalten als späte Bindung bezeichnet. Dies bedeutet, dass Sie nur zur Laufzeit wissen, wie die aufgerufene Funktion aussieht, und nicht als frühe Bindung, die während der Kompilierungsphase festgelegt wird. Mehrfachvererbung kann auch dazu führen, dass die vtables von Unterklassen ungewöhnlich werden. Die einfach geerbte vtable fügt einfach eine neue virtuelle Funktion am Ende der vtable der übergeordneten Klasse hinzu, und die vtable des Unterklassenobjekts enthält die geordnete vtable der übergeordneten Klasse. Bei der Mehrfachvererbung können die beiden übergeordneten Klassen völlig unterschiedliche vtables haben. Daher ist es absolut unmöglich, dass die vtable der Unterklasse die vollständigen und geordneten vtables der beiden übergeordneten Klassen enthält. Die vtable der Unterklasse kann zwei getrennte vtables der übergeordneten Klasse enthalten, sodass jede übergeordnete Klasse gezwungen ist, eine vtable anzuhängen, d. h. jedem übergeordneten Klassenobjekt wird ein Zeiger hinzugefügt. Mehrfachvererbung bringt auch einige andere Probleme mit sich: Die Verwendung von übergeordneten Klassenzeigern, um auf Unterklassenobjekte zu verweisen, wird zu einer komplizierten Angelegenheit. Sie müssen den in C++ bereitgestellten Dynamic_cast verwenden, um die Umwandlung durchzuführen. Dynamic_cast ist ebenfalls ein problematischer Typ, da es während der Laufzeit und nicht während der Kompilierung konvertiert werden kann (da es während der Kompilierung nicht bestimmen kann, in welchen Typ es konvertieren möchte). Der Compiler ermöglicht RTTI (Runtime Type Information, Laufzeittypinformationen), wodurch der Compiler die Laufzeitinformationen aller Klassen speichern muss. Zusammenfassend: Im wirklichen Leben haben einige Dinge oft die Eigenschaften von zwei oder mehr Dingen. Um dieses Problem zu lösen, wird das Konzept der Mehrfachvererbung eingeführt. Der Vorteil der Mehrfachvererbung besteht darin, dass ein Objekt Schnittstellen in mehreren Basisklassen aufrufen kann. Der Nachteil der Mehrfachvererbung besteht darin, dass sie zu Mehrdeutigkeiten bei der Vererbung neigt und die Komplexität des Programms erhöht. Vorschlag: Nutzen Sie die Mehrfachvererbung mit Bedacht. Das Letzte: Die Existenz ist vernünftig.

Das obige ist der detaillierte Inhalt vonVerständnis der PHP-Mehrfachvererbung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage