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

69

我如何使用call_user_func_array调用一个类的构造函数?

不可能这样做:

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

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

限制条件:我无法控制需要实例化的类,也不能修改它们。

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


1
在这里可以看到各种解决方案:https://dev59.com/2nI-5IYBdhLWcg3wSGQB - Gordon
1个回答

158

您可以像这样使用reflection

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

这将在低于5.6.0的版本中失败,并显示以下错误:解析错误:语法错误,意外的'.'。 - Nex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接