2011-12-16 62 views
8

我如何可以調用對象的構造函數傳遞參數數組使得具有:傳遞的參數數組對象構造

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

我就能夠調用

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

考慮到我不知道可以在陣列中設置多少個參數。 有沒有類似call_object('Abc', array($param1, $param2))

+3

爲什麼不只是傳遞數組? `新的Abc($ array)`? – ManseUK 2011-12-16 14:16:11

+2

也許傑夫不會寫/控制這些類...... – VolkerK 2011-12-16 14:21:51

+0

@JeffPigarelli也許如果你更好地表達了你的問題,或者給出了更多的例子,你就不會有這麼多「不正確」的答案...... – ManseUK 2011-12-16 14:27:20

回答

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

理想的是定義構造函數採取ARRA年。

如果您不能這樣做,則可能會有解決方法。如果所有參數構造函數是可選的,你可以做這樣的事情與call_user_func_array

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

這導致被運行兩次,你的構造:第一次不帶任何參數,而一旦與在數組中。您必須決定這是否適合您的應用程序。

10

如何使用...(圖示操作符)?

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

PHP 5.6是必需的。