本节介绍php中的迭代器Iterator的具体用法。
一,最简单的迭代形式 foreach语句
1,foreach 可以用于数组, 例如:
2,foreach 也可以用于对象, 例如:
注意: 如果在对象之外用这条语句只能输出公有的属性,不能输出私有的和保护的属性。
二,下面通过几个例子,来帮助大家理解iterator的用法。
其中DirectoryIterator,RecursiveDirectoryIterator,LimitIterator都是PHP预定义的iterator类:
例1,显示/etc/目录下的所有文件(不显示子目录下的文件):
例2,显示/etc/目录下的嵌套的任意层的子目录中的所有文件(显示出目录路径):
例3,显示/etc/目录下的前10个文件:
说明:在php编程中,合理应用iterator迭代,可以使代码清晰,加快编程速度。
三,下面分析下Iterator迭代器的原理
1,PHP中将实现了接口Iterator中5个方法的类都称为iterator,分别为:
常用的iterator有: DirectoryIterator、SimpleXMLIterator几种。
2,递归iterator是实现了接口RecursiveIterator中的hasChildren()和getChildren()方法的类,
例如以上例2中的RecursiveDirectoryIterator。
3,以上例3中显示了iterator 的链接, 即将一个iterator(可以称为源iterator)作为另一个iterator(可以称为目标iterator)的参数, 通常用于数据过滤.
常用的用于链接的iterator是FilterIterator和LimitIterator。
FilterIterator是一个抽象类, 需要实现它的accept()方法作为过滤数据的规则,
而LimitIterator是类, 用法是new LimitIterator(源iterator,起始位,个数) 用于获得指定个数的元素。
4,PHP中另提供IteratorAggregate接口, 用于将非iterator的类构造为iterator, 实际是实现该接口中的getIterator()方法.
例如:
<?php
class sample implements Iterator
{
private $_items = array(1,2,3,4,5,6,7);
public function __construct() {
;//void
}
public function rewind() { reset($this->_items); }
public function current() { return current($this->_items); }
public function key() { return key($this->_items); }
public function next() { return next($this->_items); }
public function valid() { return ( $this->current() !== false ); }
}
$sa = new sample();
foreach($sa as $key => $val){
print $key . "=>" .$val;
}
?>
php中Iterator迭代器的用法,就介绍到这里了,希望可以帮助到大家。