对象集合

时间:2011-03-05 18:15:17

标签: php mysql object

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

答案 0 :(得分:5)

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

此外,您的代码中存在错误。你一遍又一遍地覆盖$item。您应该创建一个数组(或实现Iterator的对象,如我所提到的),它将在while的每个周期填充(如tandu已写的那样)。

答案 1 :(得分:1)

您的循环会一直使用data覆盖item,并立即覆盖new ContentItem()。如果通过“对象集合”表示“数组”,则非常简单:

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

如果要返回自己的自定义对象集合,则定义集合类并每次向其集合添加$ data(也可能存储在数组中)。

答案 2 :(得分:1)

简单的解决方案是数组。我还假设你想要一个由每组$ data

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

如果您以后想要使用这些项目,可以使用foreach

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