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

2022-08-30 09:03:11

我怎么能把类的构造函数称为call_user_func_array

不可能做到:

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

因为如果构造函数具有参数,则新的构造函数将失败。

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

不要问我为什么要做这个疯狂的事情,这是一个疯狂的测试。


答案 1

您可以使用反射,如下所示:

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

答案 2

推荐