[PHP]Überladen von Funktionen "umgehen"
-
Hi,
In PHP kann man ja leider keine Funktionen/Methoden überladen, hat trotzdem einer ne Idee wie ich einen Konstruktor für eine Klasse auf verschiedene Aufrufe (also mal 2 variable,mal 3, mal 5 etc.)vorbereiten kann?Danke
-
Hallo,
mir würden da auf Anhieb nur 2 Möglichkeiten einfallen:
1. Du übergibst ein Parameterarray:
class whatEver { public function doSomething(Array $params) { // Nothing yet here ... } }
2. Du implementierst die Initialisierungsfunktion nicht im Konstruktor sondern in einer Scheinfunktion, die via __call() aufgerufen wird.
Siehe dazu auch: http://de.php.net/__call ("Overloading")In keinem Fall kommst du um die Verwendung eines Arrays herum.
Im 1. Fall kommt das primär bei der Anwendung der Klasse/Funktion zum tragen, im 2. Fall bei der Implementierung der Funktion selbst.
-
Hm, oder du machst folgendes:
[..] function my_func($arg1=null, $arg2=null, $arg3=null)
Dann kannst du die Funktion mit 1, 2, oder 3 parametern aufrufen.
-
Glaube ich habe einen adäquaten Ersatz gefunden. Und zwar (denke ihr kennt das - mir ist es neu) kann man bei PHP in den Funktionsparametern Standardwerte angeben, womit diese optional werden - sehr praktisch. Denke damit kann ich was anfangen.
Hier meine Quelle:
http://www.phpbar.de/w/Funktion#StandardwerteEdit: Oh, LeGaN hat's ja gerade geschrieben
-
Sicher, das ist eine recht praktische Möglichkeit. Hakelig wird es aber, wenn die Parameter
null
als zu erwartenden Wert enthalten können. Außerdem lässt sich somit nicht das angesprochene Szenario erreichen, dass die Funktion mit 2, 3 oder 5 Parametern aufrufbar ist.Da du aber auch bei der __call()-Methode nicht um das Schreiben von parameterprüfendem Code herum kommst, ist der Vorschlag in PHP vermutlich sogar recht elegant, sofern die Einschränkungen keine Probleme mit sich bringen
P.s. @LeGaN
Du kannst die Funktion, so wie von dir beschrieben, nicht mit 1-3 Parametern aufrufen, sondern mit 0-3 :p
-
Hmm ja zum Teil ist das ja schon das was ich brauche, nur leider (wobei mir da auch kein Weg in z.B. C++ einfällt) ist, dass ich bei 5 Parametern, wovon 3 gleich sind man immer "null" als Übergabewert angeben muss, damit man zu den Parametern kommt wo man hin will^^
Naja...
-
Alles klar, was du bräuchtest sind "Named Parametres":
int a = myFunction(id=5, age=6); int b = myFunction(); int c = myFunction(age=89, code="Test");
So etwas kann man mit einem wahnsinnigen Aufwand in C++ über eine Boost-Library nachbauen. Ich kenne keine "Mainstream"-Sprache, die so etwas von Haus aus unterstützt
-
P.s. @LeGaN
Du kannst die Funktion, so wie von dir beschrieben, nicht mit 1-3 Parametern aufrufen, sondern mit 0-3 :pDa war ich mal wieder zu flink mim abschicken des Postings (da erinnere ich mich doch grad an "Erst denken, dann Posten" lieber LeGaN
)