Estoy tratando de entender los iteradores SPL y he encontrado dos formas de manejarlo. Veo que la primera versión es menos complicada, pero la segunda versión tiene una sensación de composición (creo).En caso de que un objeto implemente un iterador u otro objeto que implemente un iterador
¿Qué es lo que no veo es cuál es preferible sobre el otro? ¿O acabo de complicar esto?
Aquí están mis pensamientos:
El objeto implementa un iterador:
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
}
el objeto contiene un objeto iterate-poder:
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
}