如何动态填充对象属性?

时间:2011-07-25 05:07:07

标签: php

我正在尝试使用可变数量的“cols”保存对象。 col的数量等于标题的数量。这就是代码之前的样子:

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];
    }

如何将变量$ i传递给对象的属性? $ sub->(col。$ i)? $ sub->(col {$ i})?请帮我解决这个问题=)谢谢

4 个答案:

答案 0 :(得分: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 :(得分:2)

您必须使用{}

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

答案 2 :(得分:1)

$field = "col$i";
$sub->$field = "whatver"

答案 3 :(得分: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++;
}
相关问题