Wiem, że to pytanie brzmi dość niejasno, więc wyjaśnię je na przykładzie:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
To jest to, co chcę zrobić. Jak byś to zrobił? Oczywiście mógłbym użyć eval () w ten sposób:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Ale wolałbym trzymać się z dala od eval (). Czy można to zrobić bez eval ()?
$var = __NAMESPACE__ . '\\' . $var . 'Class';
Jeśli używasz przestrzeni nazw
W moich własnych ustaleniach myślę, że dobrze jest wspomnieć, że (o ile wiem) musisz zadeklarować pełną ścieżkę przestrzeni nazw klasy.
MyClass.php
index.php
źródło
Jak również przekazywać parametry konstruktora dynamicznego
Jeśli chcesz przekazać do klasy parametry konstruktora dynamicznego, możesz użyć tego kodu:
Więcej informacji o klasach i parametrach dynamicznych
PHP> = 5.6
Od PHP 5.6 możesz to jeszcze bardziej uprościć używając Rozpakowywanie argumentów :
Dziękuję DisgruntledGoat za wskazanie tego.
źródło
new $className(...$params)
źródło
Chciałbym polecić
call_user_func()
lubcall_user_func_array
php metod. Możesz je sprawdzić tutaj ( call_user_func_array , call_user_func ).przykład
Jeśli masz argumenty, które przekazujesz do metody, użyj
call_user_func_array()
funkcji.przykład.
źródło