如何调用传递参数数组的对象构造函数,从而具有:
$array = array($param1, $param2);
我可以打电话给
$abc = new Abc($param1, $param2);
考虑到我不知道数组中可以设置多少参数。有没有类似call_object('Abc', array($param1, $param2))
的东西
如何使用…(长条木板运营商)?
$array = array($param1, $param2);
$abc = new Abc(...$array); // equal to: new Abc($param1, $param2)
最好的方法是使用存储参数的数组或对象然后传递数组/对象
另一种方法是使用反射(http://de2.php.net/Reflection)使用newInstanceArgs (http://de2.php.net/manual/de/reflectionclass.newinstanceargs.php)
理想情况是将构造函数定义为接受数组。
如果你不能这样做,有一个可能的解决方案。如果构造函数的所有参数都是可选的,那么您可以对call_user_func_array
这样做:
$obj = new Abc;
call_user_func_array(array($obj, '__construct'), $array);
这将导致构造函数运行两次:一次不带参数,一次带数组中的参数。您必须决定这是否适合您的应用程序。
假设您能够修改对象的构造函数,这样的模式并不少见,但需要关联数组作为输入:
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);