Was verstehen Sie in PHP unter Funktionsüberladung und Funktionsüberschreibung? und was ist der Unterschied zwischen beiden? konnte nicht herausfinden, was der Unterschied zwischen ihnen ist.
php
overloading
overriding
Parag
quelle
quelle
Antworten:
Überladen definiert Funktionen mit ähnlichen Signaturen, jedoch unterschiedlichen Parametern. Das Überschreiben ist nur für abgeleitete Klassen relevant, bei denen die übergeordnete Klasse eine Methode definiert hat und die abgeleitete Klasse diese Methode überschreiben möchte .
In PHP können Sie Methoden nur mit der magischen Methode überladen
__call
.Ein Beispiel für das Überschreiben :
quelle
__call
.Funktionsüberladung tritt auf, wenn Sie denselben Funktionsnamen zweimal (oder mehrmals) mit unterschiedlichen Parametersätzen definieren. Beispielsweise:
Im obigen Beispiel ist die Funktion
compute
mit zwei verschiedenen Parametersignaturen überladen. * Dies wird in PHP noch nicht unterstützt. Eine Alternative besteht darin, optionale Argumente zu verwenden:Das Überschreiben von Funktionen tritt auf, wenn Sie eine Klasse erweitern und eine in der übergeordneten Klasse vorhandene Funktion neu schreiben:
Zum Beispiel
compute
überschreibt die eingestellte Verhalten nachAddition
.quelle
Subtraction
Klasse dieAddition
Klasse erweitern soll. :)Genau genommen gibt es keinen Unterschied, da Sie das auch nicht können :)
Das Überschreiben von Funktionen hätte mit einer PHP-Erweiterung wie APD erfolgen können, ist jedoch veraltet und die letzte Version von afaik war unbrauchbar.
Funktionsüberladung in PHP kann aufgrund dynamischer Typisierung nicht durchgeführt werden, dh in PHP "definieren" Sie Variablen nicht als einen bestimmten Typ. Beispiel:
Jede Variable hat einen anderen Typ, Sie können den Typ jedoch vor der Ausführung kennen (siehe den vierten). Zum Vergleich verwenden andere Sprachen:
Im letzten Beispiel müssen Sie den Variablentyp zwangsweise festlegen (als Beispiel habe ich den Datentyp "etwas" verwendet).
Ein weiteres "Problem", warum eine Funktionsüberladung in PHP nicht möglich ist: PHP hat eine Funktion namens func_get_args (), die ein Array aktueller Argumente zurückgibt. Betrachten Sie nun den folgenden Code:
Wenn man bedenkt, dass beide Funktionen eine beliebige Anzahl von Argumenten akzeptieren, welches sollte der Compiler wählen?
Abschließend möchte ich darauf hinweisen, warum die obigen Antworten teilweise falsch sind; Das Überladen / Überschreiben von Funktionen entspricht NICHT dem Überladen / Überschreiben von Methoden .
Wenn eine Methode wie eine Funktion ist, aber für eine Klasse spezifisch ist, erlaubt PHP in diesem Fall das Überschreiben in Klassen, aber wiederum keine Überladung aufgrund der Sprachsemantik.
Zusammenfassend lässt sich sagen, dass Sprachen wie Javascript das Überschreiben (aber auch kein Überladen) zulassen. Sie können jedoch auch den Unterschied zwischen dem Überschreiben einer Benutzerfunktion und einer Methode aufzeigen:
quelle
Überladungsbeispiel
quelle
Obwohl das Überladungsparadigma von PHP nicht vollständig unterstützt wird, kann der gleiche (oder sehr ähnliche) Effekt mit Standardparametern erzielt werden (wie bereits erwähnt).
Wenn Sie Ihre Funktion folgendermaßen definieren:
Wenn Sie diese Funktion wie folgt aufrufen:
Sie erhalten eine Funktionalität (Nr. 1), aber wenn Sie sie mit folgenden Parametern aufrufen:
Sie erhalten eine weitere Funktionalität (# 2). Das ist der Effekt der Überladung - unterschiedliche Funktionen abhängig von den Eingabeparametern der Funktion.
Ich weiß, jemand wird jetzt fragen, welche Funktionalität man bekommt, wenn er diese Funktion als f (0) aufruft.
quelle
Ich möchte hier darauf hinweisen, dass das Überladen in PHP im Vergleich zu anderen Programmiersprachen eine völlig andere Bedeutung hat. Viele Leute haben gesagt, dass Überladung in PHP nicht unterstützt wird und nach der herkömmlichen Definition von Überladung ja, dass Funktionalität nicht explizit verfügbar ist.
Die korrekte Definition der Überladung in PHP ist jedoch völlig anders.
In PHP bezieht sich Überladung auf das dynamische Erstellen von Eigenschaften und Methoden mit magischen Methoden wie __set () und __get (). Diese Überladungsmethoden werden aufgerufen, wenn mit Methoden oder Eigenschaften interagiert wird, auf die nicht zugegriffen werden kann oder die nicht deklariert sind.
Hier ist ein Link aus dem PHP-Handbuch: http://www.php.net/manual/en/language.oop5.overloading.php
quelle
Methodenüberladung tritt auf, wenn zwei oder mehr Methoden mit demselben Methodennamen, aber unterschiedlicher Anzahl von Parametern in einer Klasse. PHP unterstützt keine Methodenüberladung. Das Überschreiben von Methoden bedeutet, dass zwei Methoden mit demselben Methodennamen und derselben Anzahl von Parametern in zwei verschiedenen Klassen übergeordnete Klasse und untergeordnete Klasse bedeuten.
quelle
Es gibt einige Unterschiede zwischen Funktionsüberladung und -überschreibung, obwohl beide denselben Funktionsnamen enthalten. Beim Überladen enthalten Funktionen mit demselben Namen unterschiedliche Argument- oder Rückgabetypen. Beispiel: "function add (int a, int b)" & " Funktion add (float a, float b); Hier ist die Funktion add () überladen. Beim Überschreiben sind sowohl das Argument als auch der Funktionsname gleich. Sie findet sich im Allgemeinen in der Vererbung oder in Merkmalen. Wir müssen einige Taktiken befolgen, um sie einzuführen , welche Funktion wird jetzt ausgeführt? Beim Überschreiben folgt der Programmierer einigen Taktiken, um die gewünschte Funktion auszuführen, wobei das Programm beim Überladen automatisch die gewünschte Funktion identifizieren kann ... Danke!
quelle
Überladen: In der realen Welt bedeutet Überladen, jemandem zusätzliche Dinge zuzuweisen. Wie in der realen Welt bedeutet Überladen in PHP das Aufrufen zusätzlicher Funktionen. Auf andere Weise können Sie sagen, dass es eine schlankere Funktion mit verschiedenen Parametern hat. In PHP können Sie das Überladen mit magischen Funktionen verwenden, z. B. __get, __set, __call usw.
Beispiel für Überladung:
Überschreiben: Bei der objektorientierten Programmierung wird beim Überschreiben die übergeordnete Methode in der untergeordneten Klasse ersetzt. Beim Überschreiben können Sie die übergeordnete Klassenmethode in der untergeordneten Klasse erneut deklarieren. Der Zweck des Überschreibens besteht also im Wesentlichen darin, das Verhalten Ihrer übergeordneten Klassenmethode zu ändern.
Beispiel für das Überschreiben:
quelle
PHP 5.xx unterstützt keine Überladung. Aus diesem Grund ist PHP nicht vollständig OOP.
quelle