Коллекция объектов - PullRequest
       3

Коллекция объектов

1 голос
/ 05 марта 2011

Я делаю класс, который должен предоставить мне все данные из «содержимого» MySQL-таблицы.

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

<?
class ContentItem {
public $id;
public $title;
public $subtitle;
public $conent;
public $intro_length;
public $active;
public $start_date;
public $end_date;
public $views;

static function getContentItems() {     
    $query = "SELECT * FROM content";

    $result = mysql_query($query)or die(mysql_error());
    $item = new ContentItem(); 
    while ($data = mysql_fetch_object($result)) {
          $item = $data;                            
    } 
    return $item;           
  }
}

Ответы [ 3 ]

5 голосов
/ 05 марта 2011

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

Кроме того, в вашем коде есть ошибка.Вы перезаписываете $item снова и снова.Вы должны создать массив (или объект с реализованным Iterator, как я уже упоминал), который будет заполняться каждый цикл while (как уже писал tandu ).

1 голос
/ 05 марта 2011

Простым решением будет массив. Я также предполагаю, что вы хотите ContentItem, сделанный из каждого набора $ data

$items = array();
while ($data = mysql_fetch_object($result)) {
      $items[] = new ContentItem($data);
} 
return $items;

Если позже вы захотите поработать с предметами, вы можете использовать foreach

foreach ($items as $item) {
    // do something with $item
}
1 голос
/ 05 марта 2011

Ваш цикл продолжает перезаписывать data с помощью item, а new ContentItem() перезаписывается немедленно. Если под «коллекцией объектов» вы подразумеваете «массив», это довольно просто:

$items = array();
while ($data = mysql_fetch_object($result)) {
   $items[] = $data;
}
return $items;

Если вы хотите вернуть свою собственную коллекцию объектов, то определите класс коллекции и добавляйте $ data в его коллекцию каждый раз (возможно, также в массиве).

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