Eu sei que essa pergunta parece bastante vaga, então vou deixar mais claro com um exemplo:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
É isso que eu quero fazer. Como você faria? É claro que eu poderia usar eval () assim:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Mas prefiro ficar longe de eval (). Existe alguma maneira de fazer isso sem eval ()?
$var = __NAMESPACE__ . '\\' . $var . 'Class';
Se você usar namespaces
Nas minhas próprias descobertas, acho bom mencionar que você (pelo que sei) deve declarar o caminho completo do espaço para nome de uma classe.
MyClass.php
index.php
fonte
Como passar parâmetros dinâmicos do construtor também
Se você deseja passar parâmetros dinâmicos do construtor para a classe, pode usar este código:
Mais informações sobre classes dinâmicas e parâmetros
PHP> = 5.6
No PHP 5.6, você pode simplificar isso ainda mais usando o Argument Unpacking :
Agradecemos a DisgruntledGoat por apontar isso.
fonte
new $className(...$params)
fonte
Eu recomendaria os métodos
call_user_func()
oucall_user_func_array
php. Você pode vê-los aqui ( call_user_func_array , call_user_func ).exemplo
Se você tiver argumentos que está passando para o método, use a
call_user_func_array()
funçãoexemplo.
fonte