[英]php passing and looping an array into a class method
我是php類的新手,如果這很明顯的話,我們深表歉意。 我正在嘗試將數組傳遞給類方法,但是當我嘗試foreach循環時收到警告
警告:為foreach()提供了無效的參數。
foreach實際上確實循環了數組並給了我想要的結果,所以我對警告感到困惑,而且我沒有找到關於如何解決它/以正確方式進行操作的任何簡單解釋。 我還嘗試將數組作為json_encode傳遞,然后在方法內部解碼回數組,並且發生相同的警告。 還有什么讓我感到困惑,如果我在方法內部使用print_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;
}
}
這是數組...
// 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();
數組中沒有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();
從您的警告消息中我無法分辨。 但是我認為,如果您要查看堆棧跟蹤,該警告是通過$set = new Form;
這一行生成的$set = new Form;
為了向后兼容,如果PHP 5找不到給定類的__construct()函數,並且該類未從父類繼承一個__construct()函數,它將按該類的名稱搜索舊式構造函數。 實際上,這意味着唯一有兼容性問題的情況是該類具有名為__construct()的方法,該方法用於不同的語義。
因為在示例類中,您的方法與該類共享相同的名稱,並且沒有__construct
方法。 當您創建$this->payload
為空的對象時,將調用form()
方法。
您可以通過創建__construct
方法或在類定義中將$this->payload
初始化$this->payload
空數組來解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.