实例化具有可变数量的数组参数的对象

时间:2012-10-06 18:24:41

标签: php

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

我已经看过使用Reflection类的方法,但我想知道是否有更直接的方法。

谢谢

2 个答案:

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

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