2012-01-31 6 views
1

これは半概念的にはできますが、私は正しい方法で自分の頭を包むことができません。PHPでオブジェクトを設計する方法

具体的には、次の操作を実行する必要があるオブジェクトが...

class Question { 
    var $text; 
    var $filters = array(); 
    var $banners = arrya(); //But this has to be within $filter somehow... 
    ... //all getter and setter functions 
} 

は、今私は、データベースを照会するつもりですし、データの束が返されます、4列は言います。私は行のみでデータベース行から読み取ることができますので....

Object 
    Questions 
    ->Question 1 
    ->Text = Question One 
    ->Filters 
     ->Filter1 
      ->Name = Ontario 
      Banners 
      Banner 1 
       ->Name = Male 
       ->Value = 20 
      Banner 2 
       ->Name = Famales 
       ->Value = 20 
     ->Filter2 
      ->Name = Quebec 
      Banners 
      Banners 
      Banner 1 
       ->Name = Male 
       ->Value = 20 
      Banner 2 
       ->Name = Famales 
       ->Value = 20 
    ->Question 2 
    ->Text = Question Two 
    ->Filters 
    ...... 
    ..... 
    .... 
    ... 

のように見えるオブジェクトで終わるしたい

QuestionText | Filter | Banner | Value 

、私はそれぞれを追加する方法を見つける必要があります質問/フィルタの組み合わせ内に新しいバナーとバリューを追加しました。最終的に私はそれを各バナーが列であるテーブルとして吐き出したいと思っています。

答えて

3

まず、次の3つのクラスが必要になります

class Question { 
    var $text; 
    var $filters; 
} 

class Filter { 
    var $name; 
    var $banners; 
} 

class Banner { 
    var $name; 
    var $value; 
} 

次に、あなたの質問を作成し、そのようにそれらにフィルタやバナーを追加することから始めます:

$questions = array(); 
$x = 0; 
$result = mysql_query("SELECT * FROM `questions`"); 
while ($obj = mysql_fetch_object($result)) { 
    $questions[$x] = new Question(); 
    $questions[$x]->text = $obj->text; 
    $result2 = mysql_query("SELECT * FROM `filters` WHERE `question` = {$obj->id}"); 
    $questions[$x]->filters = array(); 
    $y = 0; 
    while ($obj2 = mysql_fetch_object($result2)) { 
     $questions[$x]->filters[$y] = new Filter(); 
     ... 
     // and so on 
     ... 
     $y++; 
    } 
    $x++; 
} 

お役に立てば幸いです。

+0

ありがとうございました。本当にありがとうございました。このようにレイアウトする時間を割いていただければ幸いです。 – McB

+0

大歓迎です。私はそれが助けてうれしいです。 – ralfe

+0

多くのデータベースクエリが生成されることを覚えておいてください。賢明に使用されないと、恐ろしいパフォーマンスの問題が発生する可能性があります。 –

0

まず、1つのオブジェクトに複数のオブジェクトを追加しないでください。この場合

は、既存の「質問」クラス」に「バナー」クラスと「フィルタ」クラスを作成する必要があります。出力が可能つもりです

どのようにあなたが書き込みを開始する前に、あなたがこれを決定するべきではありません

この場合、質問オブジェクトでは、データをforeachループ(複数のクエリを使用して入力する必要があります)にする必要があります。あなたが言ったように)、見つかった各フィルタに新しいFilterオブジェクトを追加します。

その後、フィルタオブジェクトでforeachループを獲得し、そこにすべてのバナーを追加し、オブジェクトも追加します。

質問オブジェクトにフィルタオブジェクトが含まれているため、これらのオブジェクトにはバナーオブジェクトが含まれているため、これらのオブジェクトの出力メソッドを定義できます。上記を行った後で、あなた自身がこれを理解することができます。そうでない場合は、ここにコメントを記入してください。お手伝いします。

1
  1. あなたのデザインは、オブジェクトの3種類があります:

    • 質問は
    • フィルタは
    • バナー
  2. あなたのデータは3つの異なった場所

    に格納されるオブジェクトオブジェクト
    • 質問表
    • フィルタテーブル
    • バナーテーブル
  3. あなたはあなたのために「質問」オブジェクトを作成する関数を作成する必要があります。それを「QuestionFactory」と名づけましょう。これは何をするかです:

    • 負荷行を質問表から
    • 負荷をフィルタテーブルからすべての関連行
    • 負荷バナーテーブルからすべての関連する行
    • オブジェクトに
    • リターンオブジェクトを作成します
関連する問題