2011-07-25 3 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']; 

これは私がそれを見てみたい方法です:私は、オブジェクトの属性に変数$ Iを渡すにはどうすればよい

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})?

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

しかし、これは本当に列がSubオブジェクトに格納されなければならないような方法ではありません、あなたは、配列を使用する必要があります。

答えて

2

はこれを試してみてくださいありがとう)=私はこれを理解助けてください:

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

私は同意し、列の型は配列でなければなりません。 – slik

+0

okクール - それは間違いなくもっと意味があります。 –

+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

私はセッターメソッドが好きです。

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

それでも私の頭を抱き締めようとしているが、これはどういう仕組みか分かりません。 –

関連する問題