Ich versuche, SPL-Iteratoren in den Griff zu bekommen, und ich habe zwei Möglichkeiten gefunden, damit umzugehen. Ich sehe die erste Version weniger kompliziert, aber die zweite Version hat ein Gefühl der Komposition (denke ich).Sollte ein Objekt einen Iterator implementieren oder ein anderes Objekt enthalten, das einen Iterator implementiert
Was sehe ich nicht ist, welches dem anderen vorzuziehen ist? Oder mache ich das nur etwas komplizierter?
Hier sind meine Gedanken:
Das Objekt implementiert einen Iterator:
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
}
Das Objekt enthält ein Iterierte-able Objekt:
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
}