我試圖讓我的頭繞着SPL迭代器,我想出了兩種方法來處理它。我認爲第一個版本不那麼複雜,但第二個版本對它有構圖感(我認爲)。一個對象應該實現一個迭代器還是包含實現一個迭代器的另一個對象
我沒有看到哪一個比另一個更可取?還是我過分複雜呢?
這裏是我的想法:
對象實現一個迭代器:
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
}