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

时间:2014-12-30 15:09:56

标签: php arrays foreach

我是一些新的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();

2 个答案:

答案 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初始化为空数组来解决此问题。