If anyone out there is trying to build a collection object in PHP using the IteratorAggregate, here’s a tip that will save you hours of debugging and online searching:
Return an ArrayObject from getIterator()!
What finally worked for me looks something like this:
class Collection implements IteratorAggregate
{
private $items = array();
private $count = 0;
public function getIterator()
{
return new ArrayObject($this->items);
}
public function add($value)
{
$this->items[$this->count++] = $value;
}
public function count()
{
return $this->count;
}
}
All of the documentation I could find online seemed to indicate that the object returned from getIterator() should be the class itself (e.g. Collection), but that didn’t work. So through some searching and a lot of trial and error, I finally figured it out. And it only took me a couple of hours to figure that out!
Comments