5. IteratorAggregate界面
但是,虽然$A可以像数组那样操作,却无法使用foreach遍历,除非部署了前面提到的Iterator界面。
另一个解决方法是,有时会需要将数据和遍历部分分开,这时就可以部署IteratorAggregate界面。它规定了一个getIterator()方法,返回一个使用Iterator界面的object。
还是以上一节的Article类为例:
class Article implements ArrayAccess, IteratorAggregate { /** * Defined by IteratorAggregate interface * Returns an iterator for for this object, for use with foreach * @return ArrayIterator */ function getIterator() { return new ArrayIterator($this); }
使用方法如下:
$A = new Article('SPL Rocks','Joe Bloggs', 'PHP'); // Loop (getIterator will be called automatically) echo 'Looping with foreach:<div>'; foreach ( $A as $field => $value ) { echo "$field : $value<br>"; } echo '</div>'; // Get the size of the iterator (see how many properties are left) echo "Object has ".sizeof($A->getIterator())." elements";