Я знаю, что этот вопрос звучит довольно расплывчато, поэтому я поясню это на примере:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
Это то, что я хочу сделать. Как бы вы это сделали? Конечно, я мог бы использовать eval () следующим образом:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Но я бы предпочел держаться подальше от eval (). Есть ли способ сделать это без eval ()?
$var = __NAMESPACE__ . '\\' . $var . 'Class';
Если вы используете пространства имен
В моих собственных выводах я думаю, что хорошо упомянуть, что вы (насколько я могу судить) должны объявить полный путь к пространству имен класса.
MyClass.php
index.php
источник
Как передать параметры динамического конструктора тоже
Если вы хотите передать динамические параметры конструктора в класс, вы можете использовать этот код:
Больше информации о динамических классах и параметрах
PHP> = 5.6
Начиная с PHP 5.6 вы можете упростить это еще больше, используя распаковку аргумента :
Спасибо DisgruntledGoat за указание на это.
источник
new $className(...$params)
источник
Я бы порекомендовал методы
call_user_func()
илиcall_user_func_array
PHP. Вы можете проверить их здесь ( call_user_func_array , call_user_func ).пример
Если у вас есть аргументы, передаваемые методу, используйте
call_user_func_array()
функцию.пример.
источник