2014-06-28 37 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()); 
相关问题