我的问题标题可能在逻辑上是错误的,因为我不知道如何解释它:)
以下是我需要的例子。我有一个主要的classe和另外两个这个大师班创建的类。这两个类有带参数的构造函数,我不知道如何传递这些参数。
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()
我明白为什么会这样。但是如何以这种方式将参数传递给这个类(当类名在数组中时)?当我创建字符串并传递它时,我有一个错误:类不能转换为字符串。
答案 0 :(得分:1)
你忘了parens ($args)
中的论据。
$instance = new $objectName($args);
ClassA
和ClassB
都有构造函数,这些构造函数需要一个名为$settings
的参数。顺便说一下,你把它拼错了。
答案 1 :(得分:1)
如果你编写新的Class_A()而不是$ class,你会初始化对象:
public function load_classes() {
foreach ($this->settings['classes'] as $class) {
$obj = new $class($this->settings);
}
}
答案 2 :(得分: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());