Как вызвать конструктор с помощью call_user_func_array в PHP - PullRequest
65 голосов
/ 09 марта 2010

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

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

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

потому что, если конструктор имеет параметры, new завершится ошибкой.

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

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

1 Ответ

144 голосов
/ 09 марта 2010

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

$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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...