Как вызвать конструктора с call_user_func_array в PHP

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

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

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

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

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

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

66
задан AstroCB 19 August 2014 в 03:40
поделиться

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);
}
146
ответ дан 24 November 2019 в 14:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: