2011-11-26 72 views
0

我知道call_user_func_array的存在,但我不相信你可以用它來構造一個類(如果可以的話,你是如何做的?)。只要我沒有弄錯,你如何實例化一個數組作爲參數的類?以數組爲參數實例化一個類

例如:

class Test { 
    public function __construct($var1, $var2) { 
     // do something 
    } 
} 

我將如何與這個實例吧: 陣列( 「var1_data」, 「var2_data」)

+0

你想構建具有未知數量的參數的對象或單個參數是一個數組? –

回答

0

如果您必須具有多個構造函數,則應將它們命名爲__construct以外的其他名稱,然後定義一個可接受任意數量參數的__construct方法。在該方法中,您可以確定要使用哪個自定義構造函數。如果你想要做的是讓構造函數傳遞一個數組,而不是一個參數列表,你可以做到這樣(注意這個例子沒有任何錯誤檢查):

public function __construct() { 
    $args = func_get_args(); 
    if(count($args) == 1 && is_array($args[0])) { 
     $cArgs = $args[0]; 
    } else { 
     $cArgs = $args; 
    } 

    __do_construct($cArgs[0], $cArgs[1]); 

} 

private function __do_construct($arg1, $arg2) { 
    // do something 
} 
+0

所以我假設在班級之外沒有辦法做到這一點? – qrokodial

+0

當然,我只是假設你正在努力在課堂上做到這一點。你可以用反射來做。參見[http://stackoverflow.com/questions/1569949/instantiating-a-new-php-class-with-one-or-many-arguments](http://stackoverflow.com/questions/1569949/instantiating-a - 新的PHP類與 - 一或一對多的論點)。 –

1
class Test { 
    public function __construct(array $params) { 
     // ... 
    } 
} 

不要用「神奇」,除非你真的需要它。

編輯:

如果你需要的是varagrs,你可以找到答案here

+0

我確實需要它,我顯然沒有理由使用它。 – qrokodial

相關問題