Как спроектировать объект в PHP - PullRequest
1 голос
/ 31 января 2012

Я могу полу-концептуально получить это, но я не могу обернуть голову вокруг правильного способа сделать это.

В частности, объект, который должен сделать следующее ...

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

Теперь я собираюсь сделать запрос к базе данных и получить набор возвращаемых данных, скажем, 4 столбца.

QuestionText | Filter | Banner | Value

Я хочу получить объект, который выглядит как ....

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
     ......
     .....
     ....
     ...

Поскольку я могу читать только из базы данных построчно, мне нужно найти способ добавить каждый новый баннер и значение в комбинацию Вопрос / Фильтр.В конце концов я хочу выложить его в виде таблицы, где каждый баннер представляет собой столбец.

Ответы [ 3 ]

3 голосов
/ 31 января 2012

Во-первых, вам понадобятся три класса

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

Надеюсь, это поможет.

1 голос
/ 31 января 2012
  1. Ваш дизайн будет иметь 3 типа объектов:

    • объекты вопросов
    • фильтр объектов
    • баннер
  2. Ваши данные будут храниться в 3 разных местах

    • таблица вопросов
    • таблица фильтров
    • баннерный стол
  3. Вы должны создать функцию, которая будет создавать объекты «Вопрос» для вас. Давайте назовем это «QuestionFactory». Вот что он будет делать:

    • загрузить строку из таблицы вопросов
    • загрузить все связанные строки из таблицы фильтров
    • загрузить все связанные строки из таблицы баннеров
    • создать объект
    • вернуть объект
0 голосов
/ 31 января 2012

Прежде всего, не добавляйте это в 1 объект, но несколько объектов.

В этом случае вам следует создать класс «Banner» и класс «Filter» для существующего класса «Question».

Как будет выглядеть вывод, вы не должны определять это, прежде чем начать писать. Вы должны определить, какие объекты вам нужны, какой должна быть их функциональность и какие данные в ней хранить.

В этом случае в вашем объекте вопроса вы должны заполнить данные циклом foreach (с несколькими запросами, как вы сказали) и добавить новый объект Filter для каждого фильтра, который вы найдете.

После этого в вашем фильтрующем объекте снова цикл foreach, добавляя туда все баннеры, в том числе и с объектами.

Поскольку объект вашего вопроса теперь содержит объекты фильтра, которые, в свою очередь, содержат объекты баннеров, вы можете определить метод вывода для этих объектов. Вы могли бы понять это самостоятельно после того, как вы сделали вышеупомянутое. Если нет, оставьте комментарий здесь, и я помогу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...