php将数组传递并循环到类方法中

php将数组传递并循环到类方法中,php,arrays,foreach,Php,Arrays,Foreach,我对php类有些陌生,如果这是一个明显的问题,我深表歉意。 我试图将数组传递给类方法,但当我尝试foreach循环它时,会收到警告 警告:为…中的foreach()提供的参数无效 foreach确实循环了数组并给出了所需的结果,因此我对警告感到困惑,并且我没有找到任何关于如何修复它/以正确方式执行它的简单解释。我还尝试将数组作为json_编码传递,然后在方法内部解码回数组,出现相同的警告。同样让我困惑的是,如果我在方法中打印r($this->payload),我什么也得不到 这是我的班级 //

我对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();