从存储库类文件中逐行获取

时间:2012-11-23 23:07:20

标签: php oop

为了简洁起见,我将简化我的例子;说我有一个index.php文件,我在其中实例化存储库类:

$itemRepos = new ItemRepository();
$allItems = $itemRepos->getAll();

此时在变量$allItems中,我从数据库中返回了所有记录,现在我可以遍历它们。

但是现在,我需要(因为内存问题)逐个从数据库中读取项目,当然,在index.php文件中我可以建立与数据库的连接并使用while像这样循环,例如:

while ($row = mysql_fetch_row($result)){
    //do stuff
}

因此逐个读取行,但我不想这样做,我想知道如何通过使用OOP原则实现同样的事情,所以不要将db连接逻辑放入{ {1}}文件,并以某种方式将其放入Repository类中。

我确实认为某种模式或'某事'已经存在,所以请把我推向正确的方向。

2 个答案:

答案 0 :(得分:3)

OOP中的此代码没有任何问题。

只需创建一个名为getNext()的新功能,它将调用mysql_fetch_row()并执行:

while ($row = $itemRepos->getNext()) {
  // ...
}

答案 1 :(得分:1)

如果您不想公开实现细节但仍希望能够迭代,则应使用Iterator pattern。目的是提供一种统一的方式,客户端可以迭代某些东西,同时保持底层实现的封装。

PDO提供结果集上的迭代器,而无需编写任何代码。但是,如果你现在必须继续使用mysql_ *扩展,你可以通过实现Iterator来编写自己的迭代器。

您可能会在手册中找到一些示例代码,用于创建迭代器来封装mysql_ *结果集。