如何在PHP中使用call_user_func_array调用构造函数

Mat*_*oli 66 php constructor

我怎么能用call_user_func_array调用类的构造函数

不可能这样做:

$obj = new $class();
call_user_func_array(array($obj, '__construct'), $args); 
Run Code Online (Sandbox Code Playgroud)

因为如果构造函数有参数,则new将失败.

约束:我不控制我必须实例化的类,也不能修改它们.

不要问我为什么要做这个疯狂的事情,这是一个疯狂的考验.

sal*_*the 146

您可以使用如下反射:

$reflect  = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);
Run Code Online (Sandbox Code Playgroud)

从PHP 5.6.0开始,...运算符也可用于此目的.

$instance = new $class(...$args);
Run Code Online (Sandbox Code Playgroud)
if(version_compare(PHP_VERSION, '5.6.0', '>=')){
    $instance = new $class(...$args);
} else {
    $reflect  = new ReflectionClass($class);
    $instance = $reflect->newInstanceArgs($args);
}
Run Code Online (Sandbox Code Playgroud)

  • 这......语法是如此过于强大:D (3认同)