Je sais que cette question semble assez vague, je vais donc la clarifier avec un exemple:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
C'est ce que je veux faire. Comment feriez-vous cela? Je pourrais bien sûr utiliser eval () comme ceci:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Mais je préfère rester à l'écart de eval (). Y a-t-il un moyen de faire cela sans eval ()?
$var = __NAMESPACE__ . '\\' . $var . 'Class';
Si vous utilisez des espaces de noms
Dans mes propres conclusions, je pense qu'il est bon de mentionner que vous (pour autant que je sache) devez déclarer le chemin complet de l'espace de noms d'une classe.
MyClass.php
index.php
la source
Comment transmettre également des paramètres de constructeur dynamiques
Si vous souhaitez transmettre des paramètres de constructeur dynamiques à la classe, vous pouvez utiliser ce code:
Plus d'informations sur les classes et paramètres dynamiques
PHP> = 5,6
Depuis PHP 5.6, vous pouvez encore plus simplifier cela en utilisant Argument Unpacking :
Merci à DisgruntledGoat pour l'avoir signalé.
la source
new $className(...$params)
la source
Je recommanderais les méthodes
call_user_func()
oucall_user_func_array
php. Vous pouvez les consulter ici ( call_user_func_array , call_user_func ).exemple
Si vous avez des arguments que vous passez à la méthode, utilisez la
call_user_func_array()
fonction.exemple.
la source