2011-07-25 71 views
0

我正在嘗試保存一個可變數量的「cols」對象。列數等於標題數量。這是之前的代碼是什麼樣子:我如何動態地填充對象屬性?

if(isset($_POST['submit'])){ 
    $sub = new Sub(); 
    $sub->product_id = $_POST['product_id']; 

    $sub->col1 = $_POST['col1']; 
    $sub->col2 = $_POST['col2']; 
    $sub->col3 = $_POST['col3']; 
    $sub->col4 = $_POST['col4']; 
    $sub->col5 = $_POST['col5']; 
    $sub->col6 = $_POST['col6']; 
    $sub->col7 = $_POST['col7']; 
    $sub->col8 = $_POST['col8']; 
    $sub->col9 = $_POST['col9']; 
    $sub->col10 = $_POST['col10']; 
    $sub->col11 = $_POST['col11']; 
    $sub->col12 = $_POST['col12']; 
    $sub->col13 = $_POST['col13']; 
    $sub->col14 = $_POST['col14']; 
    $sub->col15 = $_POST['col15']; 

這是我希望它看起來:

if(isset($_POST['submit'])){ 
    $sub = new Sub(); 
    $sub->product_id = $_POST['product_id']; 
    $i = 0; 
    foreach($headers as $header){ 
     $i++ ; 
     $sub->col.$i = $_POST['col'.$i]; 
    } 

如何傳遞變量$我到對象的屬性? $ sub - >(col。$ i)? $ sub - >(col {$ i})?請幫我想出解決辦法=)謝謝

回答

2

試試這個:

$sub = new Sub(); 
$sub->product_id = $_POST['product_id']; 
for($i = 1; $i <= count($headers); ++$i) 
    $sub->{'col' . $i} = $_POST['col' . $i]; 

但是,這是真的不是列應存放在Sub對象的方式,你應該使用數組:

$sub->columns = array(); 
for($i = 1; $i <= count($headers); ++$i) { 
    $sub->columns[] = $_POST['col' . $i]; 
} 
+1

我同意,列類型應該是一個數組。 – slik

+0

好酷 - 這絕對有更多的意義。 –

+0

現在我必須努力將$ sub>列傳遞給我的類並編寫一個函數,根據標題計數拉動標題計數並添加/刪除表中的字段...對嗎? –

2

你必須使用{}

$sub->{'col' . $i} = ... 
+0

[這個頁面](http://php.net/manual/en/sdo.sample.getset.php)意味着你也可以把這個對象當作一個關聯數組,只需要執行'$ sub ['col'。 $ i] = ...',是這樣嗎?如果是這樣,我認爲它的語法稍微更清潔/更直觀。 – aroth

+2

對象不是數組,你不能這樣做*(除非你的類正在擴展ArrayObject類)* ;;;請注意,您鏈接到的頁面是SDO *文檔的一部分(並且不是手冊中關於面向對象編程的一部分)* –

+0

感謝您澄清這一點,我不知道語法是否可行。我不認爲我會使用$ sub - > {'col'。 $ i}超過Slik和Dae對完成的應用程序的建議 - 但對於測試,您的語法可能是一種更快完成任務的方法。謝謝你。 –

1
$field = "col$i"; 
$sub->$field = "whatver" 
+0

太棒了,我同意! –

0

我更喜歡setter方法。

class Sub { 

    public function set($attribute, $value) { 
    $this->$attribute = $value; 
    } 

} 

現在你可以這樣做:

foreach($_POST as $key => $value) { 
    $sub->set($key, $value) 
} 

或不鬆耦合:

$i = 1; 
while($value = $_POST['col' . $i]) { 
    $sub->set('col' . $i, $value); 
    $i++; 
} 
+0

我仍然試圖圍繞這一點,我不明白這是如何工作 - 但我再次是一個noob和不熟悉setters。 –