Ich frage mich, ob eines der Hauptmerkmale einer Programmiersprache die Fähigkeit ist, Funktionen über Argumente zu überladen. Ich denke, dass es im Kontext der objektorientierten Programmierung wesentlich ist.
Wird es absichtlich zurückgelassen und ist es nicht erlaubt? Oder ist Überladen keine gute Praxis?
php
method-overloading
user1179459
quelle
quelle
Antworten:
Wer hat dir gesagt, dass PHP das Überladen von Funktionen nicht unterstützt? !!!
Tatsächlich unterstützt PHP das Überladen von Funktionen, jedoch auf andere Weise. Die Überladungsfunktionen von PHP unterscheiden sich von denen von Java:
Überprüfen Sie die folgenden Codeblöcke.
Funktion zur Ermittlung der Summe von n Zahlen:
Funktion zum Hinzufügen von zwei Zahlen oder zum Verketten von zwei Zeichenfolgen:
Objektorientierter Ansatz einschließlich Methodenüberladung:
Ref: http://php.net/manual/en/language.oop5.overloading.php
In PHP, Überlastung Mittel Sie Objektelemente zur Laufzeit hinzufügen können, um einige der magischen Methoden wie Implementierung
__set
,__get
,__call
usw.quelle
findSum(10, "steve", { 86, "2012-09-20" });
. Eine echte Überlastung würde neue Parameter unterschiedlicher Art ermöglichen.Keine vollständige Unterstützung für "traditionelles Überladen", nur teilweise .
Hinweis: Der zweite Teil dieser Definition bezieht sich normalerweise auf statisch typisierte Programmiersprachen, die eine Typprüfung und / oder eine Aritätsprüfung durchführen , um die richtige Deklaration auszuwählen. PHP ist keine statisch typisierte Sprache, es ist dynamisch und verwendet schwache Typisierung .
PHP UNTERSTÜTZUNG :
JA, bietet die Möglichkeit, mehrere Methoden mit demselben Namen, aber unterschiedlichen Mengen aufzurufen . Siehe func_get_args und @rajukoyilandy Antwort, wir können und verwenden .
f(x)
f(x,y)
JA, bietet die Möglichkeit, mehrere Methoden mit demselben Namen, aber unterschiedlichen Typen aufzurufen . Siehe interne Verwendung von gettype in der Methode.
NOT bietet die Möglichkeit , mehrere Methoden mit demselben Namen, aber unterschiedlichen Mengen zu deklarieren . Dies liegt daran, dass wir
f(x)
undf(x,y)
mit der gleichenf
Erklärung anrufen können .NOT bietet die Möglichkeit , mehrere Methoden mit demselben Namen, aber unterschiedlichen Typen zu deklarieren . Dies liegt daran, dass der PHP-Compiler
f($integer,$string)
dieselbe Funktion wie diese interpretieren mussf($string,$integer)
.In der Dokumentation zum Überladen von PHP5 finden Sie Erklärungen zum "nicht-traditionellen Überladen".
quelle