2012-02-17 4 views
1

Im .NETプログラマーですが、PHPで全く新しいです。私は何時間もこれと戦っています。PHP - 単純にコード - MVCのようなもの

私はインターフェイスからデータベースへのデータ転送を簡単にする必要があります。終わりに

$default = new stdClass(); 

      // default values - all of them should be set to default value 
      // some of them will be overwritten later, but only one of them 


    $default->{'val-string'} = ''; // default values start 
    $default->{'val-int'} = 0; 
    $default->{'val-float'} = 0; 
    $default->{'val-image'} = ' '; 
    $default->{'val-datetime'} = 0; 
    $default->{'val-boolean'} = false; // default values end 


    $container = array(); 


    $row = clone $default; 
    $row->{'field_id'} = 1; 
    $row->{'field_name'} = $nameoffield1; 
    $row->{'val-string'} = 'Diffrent types are filled for diffrent rows'; 
    $container[] = $row; 

    $row = clone $default; 
    $row->{'field_id'} = 2; 
    $row->{'field_name'} = $nameoffield2; 
    $row->{'val-int'} = $valueoffield2; 
    $container[] = $row; 

    $row = clone $default; 
    $row->{'field_id'} = 3; 
    $row->{'field_name'} = $nameoffield3; 
    $row->{'val-datetime'} = current_time(); 
    $container[] = $row; 

    // there 
    // is 
    // a lot 
    // of these 
      //rows 

$result = $database->insertContainer($db_session, $container); 

このように過負荷がPHPで可能(または非常に複雑)でない場合は、その「PHPと.NETは混合擬似コード」

list_of_rows.AddItem(makeRow($field_id1, $name1, (int)$dataforint))); 
list_of_rows.AddItem(makeRow($field_id2, $name2, (string)$dataforstring)); 
list_of_rows.AddItem(makeRow($field_id3, $name3, (date)$datafordate)); 
list_of_rows.AddItem(makeRow($field_id4, $name4, (boolean)$dataforboolean)); 

$result = $database->insertContainer($db_session, list_of_rows); 

ようなものが必要 - :私はこのような何かを持っています誰かが私の上の鉱山コードよりも良い解決策を私に与えるなら、私は幸せになるでしょう。

+0

mvcについては、cakephpなどの特定のフレームワークを探しましたか? –

+0

メソッド内でfunc_get_argsを使用してから、型チェックを実行するか、__callマジック関数を使用することができます。 – busypeoples

+0

使用しているデータベースインターフェイスとは何ですか?既存のPHP DALまたはORMを調べましたか? .NETでやっているのと同じようにしてみると、うまく翻訳できません。質問は、あなたが達成したいことと、PHPでそれを行うための最良の方法は何ですか? – deceze

答えて

1

これは可能なアプローチです。これを実現するには、__callメソッドを使用することもできます。これは簡単な例です。どちらかというと、ORMをpropelのように使って、何かを同じようにすることができます。それは本当にタスクが何であるかによって異なります。

class Row_Builder { 

    protected $default = array(); 

    public function __construct() { 
    $this->default['field_id'] = null; 
    $this->default['field_name'] = null; 
    $this->default['val-string'] = null; 
    $this->default['val-int'] = null; 
    $this->default['val-float'] = null; 
    $this->default['val-image'] = null; 
    $this->default['val-datetime'] = null; 
    $this->default['val-boolean'] = false; 
    return; 
    } 

    public function setValues() { 
    // we only need the fist argument in this case. 
    $params= func_get_arg(0); 
    if(isset($params)) { 
     foreach($params as $key => $value) { 
     if(array_key_exists($key,$this->default)) { 
      $this->default[$key] = $value; 
     } 

     } 
    } 

    } 

    public function __get($key) { 
    if(array_key_exists($key, $this->default)) { 
     return $this->default[$key]; 
    } 
    } 
} 

$row = new Row_Builder; 
$row->setValues(array('field_id' => 1, 'field_name' => 'some value', 'val-string' => 'here is a str value')); 

print $row->field_name; 
+0

これはちょうど私が必要としているように見えます。ありがとうございました。 私はこれを理解していれば、私はこのように必要な値だけを設定できます。 $ row-> setValues(array( 'field_id' => 1、 'field_name' => 'Name'))); 配列内のすべてのフィールドが使用可能になり、そのうちの2つが設定した値を格納します。他のフィールドはデフォルトデータで埋められます。右? – Kamil

+0

@ Kamilオブジェクトが正確に開始されると、デフォルト値が設定されます。 __construct関数の内部の例を参照してください。 – busypeoples

関連する問題