1

为简洁起见,我将简化我的示例;假设我有一个index.php文件,我在其中实例化存储库类,如下所示:

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

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

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

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

并因此一一读取行,但我不想那样做,我想知道如何通过使用 OOP 原则来实现同样的事情,因此无需将数据库连接逻辑放入index.php文件中,并且通过(不知何故)把它放在 Repository 类中。

我确实认为为此已经存在某种模式或“某些东西”,所以请务必将我推向正确的方向。

4

2 回答 2

3

这段代码在 OOP 中没有任何问题。

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

while ($row = $itemRepos->getNext()) {
  // ...
}
于 2012-11-23T23:13:05.723 回答
1

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

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

您实际上可能会在手册中找到一些示例代码,用于制作用于封装 mysql_* 结果集的迭代器。

于 2012-11-24T00:04:57.787 回答