2010-03-09 56 views
58

我怎麼能調用類的構造函數call_user_func_array如何調用構造函數與call_user_func_array在PHP

這是不可能的事:

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

因爲如果構造函數的參數,該新的將會失敗。約束:我不控制我必須實例化的類,也不能修改它們。

不要問我爲什麼要做這個瘋狂的事情,這是一個瘋狂的測試。

+0

這裏看到各種解決方案: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

回答

127

您可以使用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); 
} 
+2

This ... syntax is so overpowered:D – 2016-06-22 08:14:52

+1

那三個點保存了我的一天..謝謝 – MujtabaFR 2017-08-10 06:41:07

相關問題