2012-03-30 13 views
0

私のDBから2つのオブジェクトをロードしたい。最初のオブジェクトは、親と2番目のオブジェクトを継承します(PHPとDB)。PHP - MVCとテーブルの継承

私が作成した2クラス: (それはので、これを修正しようとしないだけのサンプルではない実際のコードです;-))

class A{ 
    ... 
    public static function get($id){ 
     $query = "SELECT id,field1,field2 FROM table_A WHERE id = $id"; 
     $result = request($query); 
     return load_object_A_instance($result); 
    } 
    ... 
} 

class B extends A{  
    ... 
    public static function get($id){ 
     $query = "SELECT id,field3,field4 FROM table_B WHERE id = $id"; 
     $result = request($query); 
     return load_object_B_instance($result); 
    } 
    ...  
} 
私は、独自のプロパティを持つオブジェクトBのインスタンスでしょう

とオブジェクトAのプロパティは「同じ」アクションになります。これどうやってするの ?

私はいくつかのアイデアをしましたが、私はそれらを実装する方法を見ていない:

class B extends A{  
    ... 
    public static function get($id){ 
     $query = "SELECT id, field3, field4 FROM table_B WHERE id = $id"; 
     $result = request($query); 
     $B = load_object_B_instance($result); 

     if($B != empty/null){ 
      $B = merge(A::get($B->id),$B); // <== that's the part I don't know how to implement 
     } 
     return $B; 
    } 
    ...  
} 

編集: は、私は(それはきれいではないですが...)

echo $obj->name; //show: carlos 
echo $obj2->lastname; //show: montalvo here 
$obj_merged = (object) array_merge((array) $obj, (array) $obj2); 
$obj_merged->name; //show: carlos 
$obj_merged->lastname; //show: montalvo here; 
最初の解決策を見つけました

解決策はここにあります:How do I merge two objects?

+0

http://stackoverflow.com/questions/2994758/function-overloading-and-overriding-in- php あなたは何をしたいのですか? –

答えて

0

単にクラスを使用しているため、OOPにはなりません。あなたは二つのデータソースからデータをマージしたい場合、あなたは彼らから情報を取得し、組み合わせて、その後に第三partt:

$foo = new A($connection); 
$bar = new B($connection); 

$data = $foo->get(42) + $bar->get(1); 

また、あなたはDataMapperパターンに見て、そして適切なOOPのテーマにいくつかのビデオを見なければなりません:

+0

私が言ったように、私の問題が何であるかを示すコードサンプルだけです。すべての私の "本当の"コードはOOです(ただしあなたのリンクはインターレースされています)。 私はこの部分を理解していません。 "$ data = $ foo-> get(42)+ $ bar-> get(1);" オブジェクトを他のオブジェクトに追加するにはどうすればよいですか? PS:オブジェクトをインスタンス化したいときに、db接続をコンストラクタに渡すのは良いことだとは思いません。 – Airmanbzh

+0

@Airmanbzh、あなたのオブジェクトがデータベースとの直接通信を担当する場合、接続オブジェクトに接続オブジェクトを提供することは、まさに正しいことです。あるいは、DBアクセスのためのAPIとして 'mysql_ *'をまだ使っている石の時代の人々のひとりですか? –

+0

私のオブジェクトは自分のDBと直接通信しません。それは私のテーブルの表現です。 – Airmanbzh