Как вызвать конструктор с вызовом пользовательского массива func в PHP


Как я могу вызвать конструктор класса с call_user_func_array

это невозможно сделать:

$obj = new $class();
call_user_func_array(array($obj, '__construct'), $args); 

потому что если конструктор имеет параметры, то новая не удастся.

ограничение: я не контролирую классы, которые я должен создать, и не могу их изменить.

Не спрашивайте меня, почему я хочу сделать это безумие, это сумасшедший тест.

1 61

1 ответ:

можно использовать отражение как:

$reflect  = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);

начиная с PHP 5.6.0,... оператор может также использоваться для этой цели.

$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);
}