Jak mogę wywołać konstruktor klasy za pomocą call_user_func_array?
Nie można tego zrobić:
$obj = new $class();
call_user_func_array(array($obj, '__construct'), $args);
ponieważ jeśli konstruktor ma parametry, nowy się nie powiedzie.
Ograniczenie: Nie kontroluję klas, które muszę tworzyć, ani nie mogę ich modyfikować.
Macie jakieś pomysły?
1 odpowiedź
Możesz użyć:
$reflect = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);
Począwszy od PHP 5.6.0, do tego celu można również użyć operatora:
$ instance = new $ class (... $ args);
if(version_compare(PHP_VERSION, '5.6.0', '>=')){
$instance = new $class(...$args);
} else {
$reflect = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);
}