0

我试图将数组分解为单独的参数并将其传递给类的构造函数。call_user_func_array() 如何做到这一点?

我见过使用反射类的方法,但想知道是否有更直接的方法。

谢谢

4

2 回答 2

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

它更干净,因为更少的魔法和更多的控制

于 2012-10-06T18:37:09.347 回答
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) . ");");
}
于 2012-10-06T18:31:52.373 回答