我试图将数组分解为单独的参数并将其传递给类的构造函数。call_user_func_array() 如何做到这一点?
我见过使用反射类的方法,但想知道是否有更直接的方法。
谢谢
call_user_func_array(),因为(顾名思义)它调用函数/方法,但不打算创建对象,使用 ReflectionClass
$refClass = new ReflectionClass($class);
$object = $refClass->newInstanceArgs($args);
另一个(更多基于设计的)解决方案是静态工厂方法
class Demo () {
public static function set_args ($args) {
return new self($args[0],$args[1],$args[2]);
}
}
然后就
$object = $class::set_args($args);
它更干净,因为更少的魔法和更多的控制
这ReflectionClass
是最好的方法,最直接的方法,但还有另一种方法:
function call_new_array($klass, $args)
{
$vars = array();
$loads = array();
foreach($args as $i => $x) {
$vars[] = '$v' . $i;
$loads[] = '$v' . $i . ' = $args[' . $i . ']';
}
return eval(implode(";",$loads) .
";return new $klass(" . implode(",", $vars) . ");");
}