我如何可以調用對象的構造函數傳遞參數數組使得具有:傳遞的參數數組對象構造
$array = array($param1, $param2);
我就能夠調用
$abc = new Abc($param1, $param2);
考慮到我不知道可以在陣列中設置多少個參數。 有沒有類似call_object('Abc', array($param1, $param2))
?
我如何可以調用對象的構造函數傳遞參數數組使得具有:傳遞的參數數組對象構造
$array = array($param1, $param2);
我就能夠調用
$abc = new Abc($param1, $param2);
考慮到我不知道可以在陣列中設置多少個參數。 有沒有類似call_object('Abc', array($param1, $param2))
?
的最佳方法是使用存儲所述參數的數組或對象,你只傳遞該陣列/對象
另一種方法是使用利用反射(http://de2.php.net/Reflection)newInstanceArgs(http://de2.php.net/manual/de/reflectionclass.newinstanceargs.php)
假設你可以修改你的對象的構造函數,這樣的模式並不少見,但需要關聯數組作爲輸入:
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);
理想的是定義構造函數採取ARRA年。
如果您不能這樣做,則可能會有解決方法。如果所有參數構造函數是可選的,你可以做這樣的事情與call_user_func_array
:
$obj = new Abc;
call_user_func_array(array($obj, '__construct'), $array);
這導致被運行兩次,你的構造:第一次不帶任何參數,而一旦與在數組中。您必須決定這是否適合您的應用程序。
如何使用...(圖示操作符)?
$array = array($param1, $param2);
$abc = new Abc(...$array); // equal to: new Abc($param1, $param2)
PHP 5.6是必需的。
爲什麼不只是傳遞數組? `新的Abc($ array)`? – ManseUK 2011-12-16 14:16:11
也許傑夫不會寫/控制這些類...... – VolkerK 2011-12-16 14:21:51
@JeffPigarelli也許如果你更好地表達了你的問題,或者給出了更多的例子,你就不會有這麼多「不正確」的答案...... – ManseUK 2011-12-16 14:27:20