我有一个类,我希望能够遍历某个数组成员。我做了快速搜索,发现IteratorAggregate
:使用IteratorAggregate对成员数组进行迭代
class foo implements IteratorAggregate
{
protected $_array = array('foo'=>'bar', 'baz'=>'quux');
public function getIterator()
{
return new ArrayIterator($this->_array);
}
}
伟大的工程,但不会创造一个新的ArrayIterator
实例每次foreach
上使用它?
所以我想我应该迭代器实例存储在一个成员:
protected $_iterator;
public function getIterator()
{
if (!$this->_iterator instanceof ArrayIterator) {
$this->_iterator = new ArrayIterator($this->_array);
}
return $this->_iterator;
}
的问题是,迭代器使用的$this->_array
副本getIterator()
第一通话过程中,这样的变化对会员不反映在随后的foreach
构造。
我想我应该继承ArrayIterator
,加setArray($array)
方法和getIterator()
返回之前调用它,但我不知道它在内部使用它和它是否是由一个子类overwriteable数组的成员名称。
问题是:这是一个不成熟和/或不必要的优化?如果不是,那么实现这一目标的最佳方法是什么?
我明白了,我没有考虑过这种可能性。 – monzee 2008-12-01 20:29:35