Ich weiß, dass diese Frage ziemlich vage klingt, deshalb werde ich sie anhand eines Beispiels klarer machen:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
Das möchte ich tun. Wie würdest du es machen? Ich könnte natürlich eval () so verwenden:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Aber ich halte mich lieber von eval () fern. Gibt es eine Möglichkeit, dies ohne eval () zu tun?
$var = __NAMESPACE__ . '\\' . $var . 'Class';
Wenn Sie Namespaces verwenden
Nach meinen eigenen Erkenntnissen ist es gut zu erwähnen, dass Sie (soweit ich das beurteilen kann) den vollständigen Namespace-Pfad einer Klasse deklarieren müssen.
MyClass.php
index.php
quelle
So übergeben Sie auch dynamische Konstruktorparameter
Wenn Sie dynamische Konstruktorparameter an die Klasse übergeben möchten, können Sie diesen Code verwenden:
Weitere Informationen zu dynamischen Klassen und Parametern
PHP> = 5,6
Ab PHP 5.6 können Sie dies mit Argument Unpacking noch weiter vereinfachen :
Vielen Dank an DisgruntledGoat für den Hinweis.
quelle
new $className(...$params)
quelle
Ich würde die
call_user_func()
odercall_user_func_array
PHP-Methoden empfehlen . Sie können sie hier überprüfen ( call_user_func_array , call_user_func ).Beispiel
Wenn Sie Argumente haben, die Sie an die Methode übergeben, verwenden Sie die
call_user_func_array()
Funktion.Beispiel.
quelle