1

簡潔にするために、例を簡略化します。次のようにリポジトリクラスをインスタンス化するindex.phpファイルがあるとします。

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

そして、変数のこの時点で$allItems、データベースからすべてのレコードが返され、それらを反復処理できるようになりました。

しかし、今は(メモリの問題のために)データベースからアイテムを1つずつ読み取る必要があります。確かに、index.phpファイル内でデータベースに接続して、たとえば次のようなwhileループを使用できます。

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

したがって、行を1つずつ読み取りますが、そのようにしたくはありません。OOPの原則を使用して、db接続ロジックを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 に答える