php关于Iterator (迭代)

关于Iterator (迭代)
一. PHP中最简单的迭代形式是foreach语句.

foreach 可以用于数组, 例如:
foreach ($arr as $key=>$value) { echo $key.’ ‘.$value.’/n’;}
foreach 也可以用于对象, 例如:
foreach ($obj as $property) {echo $property.’/n’;}
注意: 如果在对象之外用这条语句只能输出公有的属性,不能输出私有的和保护的属性.

二.以下几个示例有助于理解iterator, 其中DirectoryIterator, RecursiveDirectoryIterator, LimitIterator都是PHP预定义的iterator类:

示例1 显示/etc/目录下的所有文件(不显示子目录下的文件):

1 $path = new DirectoryIterator(“/etc/”);
2 foreach ( $path as $file ){
3 echo $file .’/n’;
4 }


示例2 显示/etc/目录下的嵌套的任意层的子目录中的所有文件(显示出目录路径):

1 $path = new RecursiveDirectoryIterator(“/etc/”);
2 foreach ( $path as $file ){
3 echo $file ->getPathname().’/n’;
4 }

示例3 显示/etc/目录下的前10个文件:

1 $path = new LimitIterator(DirectoryIterator(“/etc/”),0,10);
2 foreach ( $path as $file ){
3 echo $file .’/n’;
4 }

从这几个示例可以看出利用iterator, 代码清晰, 编程速度快.

三. 简单原理

1. PHP中将实现了接口Iterator中 的5个方法的类都称为iterator, 这5个方法是:
current()—返回当前元素值,
key()—返回当前元素的键值,
next()—下移一个元素,
valid()—判定是否还有后续元素, 如果有, 返回true,
rewind()—移到首元素.

常用的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()方法.

如:

 

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;

}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值