我试图了解 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
}