私は SPL イテレータについて頭を悩ませようとしていますが、それを処理する 2 つの方法を考え出しました。最初のバージョンはそれほど複雑ではないように見えますが、2 番目のバージョンには構成の感覚があります (と思います)。
私が見ていないのは、どちらが他のものよりも好ましいですか? それとも私はこれを複雑にしすぎていますか?
ここに私の考えがあります:
オブジェクトは反復子を実装します。
class BoxOfChocolates implements Iterator {
private $id
private $name; // e.g. Valentine's Heart Box
private $maker; // e.g. Hersheys
private $items; // array
public function getChocolates() {
$query = ...
foreach($rows as $row) {
$this->_items[] = new Chocolate() ...
}
}
// ... necessary iterator implementation stuff
}
オブジェクトには、反復可能なオブジェクトが含まれています。
class BoxOfChocolates {
private $id;
private $name;
private $maker;
private $items; // chocolates object
public function getChocolates() {
$this->items = new Chocolates();
$this->items->getChocolates();
}
}
class Chocolates implements Iterator {
private $items;
public function getChocolates() {
$query = ...
foreach($rows as $row) {
$this->_items[] = new Chocolate() ...
}
}
// ... necessary iterator implementation stuff
}