Sé que esta pregunta suena bastante vaga, así que lo dejaré más claro con un ejemplo:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
Esto es lo que quiero hacer. ¿Como lo harias? Por supuesto, podría usar eval () así:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Pero prefiero mantenerme alejado de eval (). ¿Hay alguna manera de hacer esto sin eval ()?
$var = __NAMESPACE__ . '\\' . $var . 'Class';
Si usa espacios de nombres
En mis propios hallazgos, creo que es bueno mencionar que usted (por lo que puedo decir) debe declarar la ruta completa del espacio de nombres de una clase.
MyClass.php
index.php
fuente
Cómo pasar parámetros dinámicos de constructor también
Si desea pasar los parámetros del constructor dinámico a la clase, puede usar este código:
Más información sobre clases y parámetros dinámicos.
PHP> = 5.6
A partir de PHP 5.6 puede simplificar esto aún más mediante el uso de Argument Unpacking :
Gracias a DisgruntledGoat por señalar eso.
fuente
new $className(...$params)
fuente
Recomendaría los métodos
call_user_func()
ocall_user_func_array
php. Puede consultarlos aquí ( call_user_func_array , call_user_func ).ejemplo
Si tiene argumentos que está pasando al método, entonces use la
call_user_func_array()
función.ejemplo.
fuente