Как я могу вызвать конструктор класса с помощью call_user_func_array
Это невозможно сделать:
$obj = new $class(); call_user_func_array(array($obj, '__construct'), $args);
потому что, если конструктор имеет параметры, новый будет терпеть неудачу.
Ограничение: я не контролирую классы, которые я должен создать, и не могу их изменять.
Не спрашивайте меня, почему я хочу сделать эту сумасшедшую вещь, это сумасшедший тест.
Вы можете использовать отражение, например:
$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); }