我试图将数组分解为单个参数并将其传递给类的构造函数。 call_user_func_array()如何做到这一点?
我已经看过使用Reflection类的方法,但我想知道是否有更直接的方法。
谢谢
答案 0 :(得分:0)
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) . ");");
}
答案 1 :(得分:0)
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);
它更干净,因为更少的魔法和更多的控制