Gibt es eine Möglichkeit, eine Methode in derselben Klasse für PHP dynamisch aufzurufen? Ich habe nicht die richtige Syntax, aber ich möchte etwas Ähnliches tun:
War es die ursprüngliche Frage? Ich wollte eine Methode dynamisch aufrufen und fand diese Frage. Es ist dieselbe Syntax wie bei andy.gurin und ich sehe keinen Link, der das Update der Frage anzeigt. Wie auch immer ... Danke gefragt zu haben und danke an die Mitwirkenden :-)
Luc M
5
@ Luc - Es war die ursprüngliche Frage. Es stellte sich heraus, dass ich die richtige Syntax hatte, als ich fragte, aber etwas anderes stimmte nicht mit meinem Code, so dass es nicht funktionierte.
Ich denke, vielleicht hatte ich die richtige Syntax, also stimmt etwas anderes mit meinem Code nicht, da er nicht ganz richtig funktioniert. Hmm ...
VirtuosiMedia
Ein Wort an die Müden, wenn Ihre Methoden für Objekte aufgerufen und mit PHPUnit getestet werden, call_user_func_arrayist das Richtige für Sie.
OK sicher
Du mein Freund, hast gerade meinen Tag gerettet! Ich rief an call_user_func_array($this->$name, ...)und fragte mich , warum es nicht funktionieren würde!
Nach all den Jahren immer noch gültig! Stellen Sie sicher, dass Sie $ methodName kürzen, wenn es sich um benutzerdefinierten Inhalt handelt. Ich konnte $ this -> $ methodName nicht zum Laufen bringen, bis ich bemerkte, dass es ein führendes Leerzeichen hatte.
Wenn es sich um benutzerdefinierten Inhalt handelt, stellen Sie sicher, dass Sie viel mehr tun, als nur den Namen zu kürzen! Wie ... Sicherheitskontrolle! ;)
Erk
Irgendwo im Internet habe ich detailliert beschrieben, wie der vom Benutzer eingegebene utf8 in Windows-sichere Zeichen konvertiert wird. QuickBooks hat mich durch diesen Wringer geführt - und warum QB nicht mehr dazu beiträgt, wie ich Verkäufe abschließe ...
Chris K
Erlauben Sie dem Client wirklich, eine Eingabe anzugeben, die einige Methoden dynamisch aufruft ?! Ich habe keine Worte
Mcsky
Offensichtlich validiert und überprüft, dass die Klasse tatsächlich eine solche benannte Methode enthält. Es gibt viele Möglichkeiten, den Wert zu überprüfen. Es schlägt eine lange switch-Anweisung.
Antworten:
Es gibt mehr als einen Weg, dies zu tun:
Sie können sogar die Reflection-API http://php.net/manual/en/class.reflection.php verwenden
quelle
call_user_func_array
ist das Richtige für Sie.call_user_func_array($this->$name, ...)
und fragte mich , warum es nicht funktionieren würde!Lassen Sie einfach die Klammern weg:
quelle
Sie können das Überladen in PHP verwenden: Überladen
quelle
Sie können auch
call_user_func()
und verwendencall_user_func_array()
quelle
Wenn Sie in einer Klasse in PHP arbeiten, würde ich empfehlen, die überladene __call-Funktion in PHP5 zu verwenden. Die Referenz finden Sie hier .
Grundsätzlich macht __call für dynamische Funktionen das, was __set und __get für Variablen in OO PHP5 tun.
quelle
Nach all den Jahren immer noch gültig! Stellen Sie sicher, dass Sie $ methodName kürzen, wenn es sich um benutzerdefinierten Inhalt handelt. Ich konnte $ this -> $ methodName nicht zum Laufen bringen, bis ich bemerkte, dass es ein führendes Leerzeichen hatte.
quelle
In meinem Fall.
Verwenden von PHP SOAP.
quelle
Sie können eine Methode mithilfe eines Abschlusses in einer einzelnen Variablen speichern:
BEARBEITEN: Ich habe den Code bearbeitet und jetzt ist er mit PHP 5.3 kompatibel. Ein weiteres Beispiel hier
quelle