web-dev-qa-db-ja.com

PHPでcall_user_func_arrayを使用してコンストラクタを呼び出す方法

Call_user_func_arrayを使用してクラスのコンストラクターを呼び出す方法

次のことはできません。

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

コンストラクタにパラメータがある場合、newは失敗するためです。

制約:インスタンス化する必要があるクラスを制御したり、変更したりすることはできません。

なぜ私がこのクレイジーなことをしたいのかと聞かないでください。これはクレイジーなテストです。

67
Matthieu Napoli

次のように reflection を使用できます。

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

PHP 5.6.0、 ... operator もこの目的で使用できます。

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