我怎麼能調用類的構造函數call_user_func_array如何調用構造函數與call_user_func_array在PHP
這是不可能的事:
$obj = new $class();
call_user_func_array(array($obj, '__construct'), $args);
因爲如果構造函數的參數,該新的將會失敗。約束:我不控制我必須實例化的類,也不能修改它們。
不要問我爲什麼要做這個瘋狂的事情,這是一個瘋狂的測試。
我怎麼能調用類的構造函數call_user_func_array如何調用構造函數與call_user_func_array在PHP
這是不可能的事:
$obj = new $class();
call_user_func_array(array($obj, '__construct'), $args);
因爲如果構造函數的參數,該新的將會失敗。約束:我不控制我必須實例化的類,也不能修改它們。
不要問我爲什麼要做這個瘋狂的事情,這是一個瘋狂的測試。
您可以使用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);
}
This ... syntax is so overpowered:D – 2016-06-22 08:14:52
那三個點保存了我的一天..謝謝 – MujtabaFR 2017-08-10 06:41:07
這裏看到各種解決方案:http://stackoverflow.com/questions/1929108/is-there-a-call-user-func-equivalent-to-create-a-new -class-instance – Gordon 2010-03-09 13:32:48