2011-03-05 3 views
1

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

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

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

ответ

1

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

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

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

1

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

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

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

foreach ($items as $item) { 
    // do something with $item 
} 
5

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

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

Смежные вопросы