php将数组传递并循环到类方法中
我对php类有些陌生,如果这是一个明显的问题,我深表歉意。 我试图将数组传递给类方法,但当我尝试foreach循环它时,会收到警告 警告:为…中的foreach()提供的参数无效 foreach确实循环了数组并给出了所需的结果,因此我对警告感到困惑,并且我没有找到任何关于如何修复它/以正确方式执行它的简单解释。我还尝试将数组作为json_编码传递,然后在方法内部解码回数组,出现相同的警告。同样让我困惑的是,如果我在方法中打印r($this->payload),我什么也得不到 这是我的班级php将数组传递并循环到类方法中,php,arrays,foreach,Php,Arrays,Foreach,我对php类有些陌生,如果这是一个明显的问题,我深表歉意。 我试图将数组传递给类方法,但当我尝试foreach循环它时,会收到警告 警告:为…中的foreach()提供的参数无效 foreach确实循环了数组并给出了所需的结果,因此我对警告感到困惑,并且我没有找到任何关于如何修复它/以正确方式执行它的简单解释。我还尝试将数组作为json_编码传递,然后在方法内部解码回数组,出现相同的警告。同样让我困惑的是,如果我在方法中打印r($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;
}
}
这里是我将数组传递给类的地方
// 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();
您的数组中没有
选项1
(实际上是对象)。不管怎样,当它是一个对象时,为什么称它为数组?这就是$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();
类形式{
公帑形式行动;
公帑形式单位法;
公费$form_类;
公共$form_角色;
公共有效载荷;
函数showForm(){
$output='';
foreach($this->payload as$key=>$value){
$output.='';
}
返回$output;
}
}
$my_数组=(对象)数组(
“form1”=>(对象)数组(
“foo1”=>“bar1”,
“foo2”=>“bar2”
)
);
$set=新表格;
$set->form_action='';
$set->form_方法='post';
$set->form_class='form sign';
$set->form_角色='form';
$set->payload=$my_array->form1;
echo$set->showForm();
我从你的警告信息中看不出来。但我认为,如果您查看堆栈跟踪,则警告是通过行$set=new Form生成的代码>
为了向后兼容,如果PHP5找不到_构造()
函数,而该类没有从
父类,它将搜索旧式构造函数,
以类的名称命名。实际上,这意味着
如果类有一个方法,则会有兼容性问题
命名为_construct(),用于不同的语义
因为在示例类中,您的方法与该类共享相同的名称,并且没有\u构造
方法。创建对象时,$this->payload
为空时,将调用form()
方法
您可以通过创建\u构造
方法或在类定义中将$this->payload
初始化为空数组来解决此问题。为什么要将数组强制转换为对象?这可能是警告的来源。干杯lolka_bolka,通过给方法一个唯一的名称“showForm”,所有这些都很好地排序!顺便说一句,是的..很抱歉输入了'option1'位(应该是格式1)
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();