2014-06-28 40 views
0

我的問題標題可能是邏輯錯誤的,因爲我不知道該怎麼解釋呢:)如何通過從字符串創建一個類來傳遞參數給類

這裏有例子我需要什麼。我有Master Class和另外兩個班級,這些班級都是由這個班級創建的。這兩個類有帶參數的構造函數,我不知道如何傳遞這個參數。

class Master { 

    function __construct() { 
     $this->setup_settings(); 
     $this->load_classes(); 
    } 

    public function setup_settings() { 
     $this->settings['classes'] = array('Class_A', 'Class_B'); 
    } 

    public function load_classes() { 
     foreach($this->settings['classes'] as $class) { 
      new $class; //Here are problem! 
     } 
    } 

} 

class Class_A { 

    function __construct($setiings) { 
     $this->settings = $settings; 
    } 

} 
class Class_B { 

    function __construct($setiings) { 
     $this->settings = $settings; 
    } 

} 

在這種情況下,我有一個錯誤:

Warning: Missing argument 1 for Class_A ::__construct() 

我理解爲什麼它是。但是如何以這種方式將參數傳遞給這個類(當類名在數組中時)?當我創建字符串並傳遞它時,我有一個錯誤:類不能轉換爲字符串。

+2

'新的$類( '一些參數');'? – Crozin

+0

是的,你是對的。簡單的回答爲我的愚蠢問題:)我認爲這是不可能的傳遞參數。嘗試了更多其他......謝謝 – Alexander

回答

1

你忘記了parens ($args)中的論點。

$instance = new $objectName($args); 

ClassAClassB都有意想不到名爲$settings參數的構造函數。順便說一句,你在那裏拼寫錯了。

1

你會初始化,如果你寫了新的Class_A(你會做的對象),而不是$類:一是

public function load_classes() { 
    foreach ($this->settings['classes'] as $class) { 
     $obj = new $class($this->settings); 
    } 
} 
1

,你需要在這裏解決您的變量名:

class Class_A { 

    function __construct($settings // not setiings) { 
     $this->settings = $settings; 
    } 

} 
class Class_B { 

    function __construct($settings // not setiings) { 
     $this->settings = $settings; 
    } 

} 

爲了將變量傳遞給類,可以這樣做:

public function load_classes() { 
     foreach($this->settings['classes'] as $class) { 
      new $class('helloworld'); // or any variable you'd like 
     } 
    } 

但是,請注意,既然您是創建一個新的類,但不分配給任何變量,你可能無法看到結果。

試試這個,如果你想看到的結果:

class Master { 
    private $result; 

    function __construct() { 
     $this->setup_settings(); 
     $result = $this->load_classes(); 
     $this->result = $result; 
    } 

    public function getResult() 
    { 
     return $this->result; 
    } 

    public function setup_settings() { 
     $this->settings['classes'] = array('Class_A', 'Class_B'); 
    } 

    public function load_classes() { 
     foreach($this->settings['classes'] as $class) { 
      $a = new $class('hello'); 
     $arr[] = $a; // store it in an array 
     } 

     return $arr; // return the array 
    } 

} 

class Class_A { 

    function __construct($settings) { 
     $this->settings = $settings; 
    } 

} 
class Class_B { 

    function __construct($settings) { 
     $this->settings = $settings; 
    } 
} 

$master = new Master(); 
var_dump($master->getResult()); 
相關問題