为了简洁起见,我将简化我的例子;说我有一个index.php
文件,我在其中实例化存储库类:
$itemRepos = new ItemRepository();
$allItems = $itemRepos->getAll();
此时在变量$allItems
中,我从数据库中返回了所有记录,现在我可以遍历它们。
但是现在,我需要(因为内存问题)逐个从数据库中读取项目,当然,在index.php
文件中我可以建立与数据库的连接并使用while像这样循环,例如:
while ($row = mysql_fetch_row($result)){
//do stuff
}
因此逐个读取行,但我不想这样做,我想知道如何通过使用OOP原则实现同样的事情,所以不要将db连接逻辑放入{ {1}}文件,并以某种方式将其放入Repository类中。
我确实认为某种模式或'某事'已经存在,所以请把我推向正确的方向。
答案 0 :(得分:3)
OOP中的此代码没有任何问题。
只需创建一个名为getNext()
的新功能,它将调用mysql_fetch_row()
并执行:
while ($row = $itemRepos->getNext()) {
// ...
}
答案 1 :(得分:1)
如果您不想公开实现细节但仍希望能够迭代,则应使用Iterator pattern
。目的是提供一种统一的方式,客户端可以迭代某些东西,同时保持底层实现的封装。
PDO提供结果集上的迭代器,而无需编写任何代码。但是,如果你现在必须继续使用mysql_ *扩展,你可以通过实现Iterator来编写自己的迭代器。
您可能会在手册中找到一些示例代码,用于创建迭代器来封装mysql_ *结果集。