如何使用call_user_func_array调用类的构造函数
这是不可能的:
$obj = new $class(); call_user_func_array(array($obj, '__construct'), $args);
因为如果构造函数具有参数,则 新的 将失败。
约束:我不控制必须实例化的类,也不能修改它们。
不要问我为什么要做这个疯狂的事情,这是一个疯狂的考验。
您可以像这样使用反射:
$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); }