Я пытаюсь разобраться с итераторами SPL, и у меня есть 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
}