我是一些新的php类,所以如果这是一个明显的道歉,请道歉。 我正在尝试将数组传递给类方法,但是当我尝试循环它时我会收到警告
警告:为....中的foreach()提供的参数无效
foreach确实循环了数组并给了我想要的结果,所以我对这个警告感到困惑,而且我没有找到任何关于如何修复它/正确方法的简单解释。我也尝试将数组作为json_encode传递,然后在方法内部解码回一个数组,并发生相同的警告。什么也让我困惑,如果我在方法中打印__($ this-> payload),我什么也得不到。
这是我的班级......
// class
// --------------------------
class Form {
public $form_action;
public $form_method;
public $form_class;
public $form_role;
public $payload;
function form() {
$output = '';
foreach ($this->payload as $key => $value) {
$output .= '<input type="'.$key.'" name="'.$key.'" ......>';
}
return $output;
}
}
这是阵列......
// array
// --------------------------
$my_array = (object)array (
"form1" => (object)array (
"foo1" => "bar1",
"foo2" => "bar2"
)
);
这里是我将数组传递给类的地方......
// set class
// --------------------------
$set = new Form;
$set->form_action = '';
$set->form_method = 'post';
$set->form_class = 'form-signin';
$set->form_role = 'form';
$set->payload = $my_array->form1;
echo $set->form();
答案 0 :(得分:0)
数组中没有option1
(实际上是什么对象)。无论如何,为什么你把它称为数组,当它是一个对象?这将是$my_array->form1
并且您使用相同的函数名称来显示表单,作为类的名称,因此它将是构造函数。第一次运行时$this->payload
没有任何价值。
所以你的最终代码将是:
class Form {
public $form_action;
public $form_method;
public $form_class;
public $form_role;
public $payload;
function showForm() {
$output = '';
foreach ($this->payload as $key => $value) {
$output .= '<input type="' . $key . '" name="' . $key . '" ......>';
}
return $output;
}
}
$my_array = (object) array(
"form1" => (object) array(
"foo1" => "bar1",
"foo2" => "bar2"
)
);
$set = new Form;
$set->form_action = '';
$set->form_method = 'post';
$set->form_class = 'form-signin';
$set->form_role = 'form';
$set->payload = $my_array->form1;
echo $set->showForm();
答案 1 :(得分:0)
我无法从你的警告信息中看出来。但我认为,如果您要查看堆栈跟踪,通过行$set = new Form;
生成警告
From the php manual about constructors
为了向后兼容,如果PHP 5找不到__construct() 给定类的函数,并且该类没有从a继承 父类,它将搜索旧式构造函数, 按类的名称。实际上,它意味着唯一的情况 如果类有一个方法,那就会出现兼容性问题 命名为__construct(),用于不同的语义。
因为在您的示例类中,您的方法与该类共享同一名称,并且没有__construct
方法。当您创建form()
为空的对象时,将调用$this->payload
方法。
您可以通过创建__construct
方法或在类定义中将$this->payload
初始化为空数组来解决此问题。