Ist es möglich, Funktionen aus einer Klasse wie dieser aufzurufen:
$class = new class;
$function_name = "do_the_thing";
$req = $class->$function_name();
Etwas ähnliches, scheint dies nicht zu funktionieren?
Ja, es ist möglich, das heißt als variable Funktionen, einen SIEHE DAZU. Zu haben.
Beispiel von der offiziellen PHP-Seite:
<?php
class Foo
{
function Variable()
{
$name = 'Bar';
$this->$name(); // This calls the Bar() method
}
function Bar()
{
echo "This is Bar";
}
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // This calls $foo->Variable()
?>
Stellen Sie in Ihrem Fall sicher, dass die Funktion do_the_thing
vorhanden ist. Beachten Sie auch, dass Sie den Rückgabewert der Funktion speichern:
$req = $class->$function_name();
Versuchen Sie herauszufinden, was die Variable $req
enthält. Zum Beispiel sollte dies Ihnen Informationen geben:
print_r($req); // or simple echo as per return value of your function
Hinweis:
Variablenfunktionen funktionieren nicht mit Sprachkonstrukten wie echo(), print(), unset(), isset(), empty(), include(), require()
und dergleichen. Verwenden Sie Wrapper-Funktionen, um eines dieser Konstrukte als variable Funktionen zu verwenden.
Mein einfachstes Beispiel ist:
$class = new class;
$function_name = "do_the_thing";
$req = $class->${$function_name}();
$ {$ Funktionsname} ist der Trick
Funktioniert auch mit statischen Methoden:
$req = $class::{$function_name}();
Sie können ReflectionClass
verwenden.
Beispiel:
$functionName = 'myMethod';
$myClass = new MyClass();
$reflectionMyMethod = (new ReflectionClass($myClass))->getMethod($functionName);
$relectionMyMethod->invoke($myClass); // same as $myClass->myMethod();
Denken Sie daran, ReflectionException abzufangen, wenn die Methode nicht vorhanden ist.