2011-03-05 112 views
1

我正在创建一个需要向我提供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;   
    } 
} 

回答

1

你的循环不断改写dataitem,并new ContentItem()立即覆盖。如果“对象集合”你的意思是“阵列”,这是相当简单:

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

如果你想要回自己的自定义对象集合,然后定义集合类,并添加$数据的集合中的每个时间(大概也存储在一个数组中)。

1

简单的解决方案将是一个数组。我还假设你想从每组$数据

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

制成如果以后要与项目工作ContentItem,你可以使用foreach

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

对于集合,你需要创建一个对象它实现了Iterator interface。你可以用数组,对象或任何你想要的来填充它。 Iterator确保您可以在foreach之后的循环中使用此集合。

此外,代码中存在错误。一次又一次地覆盖$item。你应该创建一个数组(或者实现了Iterator的对象,正如我所提到的那样),它将在每个循环中填充(如tandu已经写过)。