将参数数组传递给对象构造函数

时间:2011-12-16 14:14:15

标签: php oop

如何调用传递参数数组的对象构造函数,以便具有:

$array = array($param1, $param2);

我可以致电

$abc = new Abc($param1, $param2);

考虑到我不知道可以在数组中设置多少个参数。 是否有类似call_object('Abc', array($param1, $param2))的内容?

4 个答案:

答案 0 :(得分:15)

如何使用...(splat operator)?

$array = array($param1, $param2);
$abc = new Abc(...$array); // equal to: new Abc($param1, $param2)

PHP 5.6是必需的。

答案 1 :(得分:6)

最好的方法是使用存储参数的数组或对象,然后传递该数组/对象

另一种方法是使用反射(http://de2.php.net/Reflection)使用newInstanceArgs(http://de2.php.net/manual/de/reflectionclass.newinstanceargs.php

答案 2 :(得分:4)

理想的是定义构造函数以获取数组。

如果您不能这样做,可能会有解决方法。如果构造函数的所有参数都是可选的,您可以使用call_user_func_array执行类似的操作:

$obj = new Abc;
call_user_func_array(array($obj, '__construct'), $array);

这会导致构造函数运行两次:一次没有参数,一次运行数组。您必须确定这是否适合您的应用程序。

答案 3 :(得分:2)

假设您能够修改对象的构造函数,这样的模式并不罕见,但需要关联数组作为输入:

class Abc {
  public $prop1;
  public $prop2;

  public function __construct($params) {
    if (is_array($params)) {
       $this->prop1 = isset($params['prop1']) ? $params['prop1'] : NULL;
       $this->prop2 = isset($params['prop2']) ? $params['prop2'] : NULL;
    }
  }
}

// Created as:
$params = array('prop1'=>12354, 'prop2'=>54321);
$abc = new Abc($params);