PHP迭代器接口Iterator用法分析


Posted in PHP onDecember 28, 2017

本文实例讲述了PHP迭代器接口Iterator用法。分享给大家供大家参考,具体如下:

PHP Iterator接口的作用是允许对象以自己的方式迭代内部的数据,从而使它可以被循环访问,Iterator接口摘要如下:

Iterator extends Traversable {
  //返回当前索引游标指向的元素
  abstract public mixed current ( void )
  //返回当前索引游标指向的键
  abstract public scalar key ( void )
  //移动当前索引游标到下一元素
  abstract public void next ( void )
  //重置索引游标
  abstract public void rewind ( void )
  //判断当前索引游标指向的元素是否有效
  abstract public boolean valid ( void )
}

下面是一个简单的例子演示Iterator的使用方法:

<?php
/**
 * 该类允许外部迭代自己内部私有属性$_test,并演示迭代过程
 *
 * @author 疯狂老司机
 */
class TestIterator implements Iterator {
  /*
   * 定义要进行迭代的数组
   */
  private $_test = array('dog', 'cat', 'pig');
  /*
   * 索引游标
   */
  private $_key = 0;
  /*
   * 执行步骤
   */
  private $_step = 0;
  /**
   * 将索引游标指向初始位置
   *
   * @see TestIterator::rewind()
   */
  public function rewind() {
    echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';
    $this->_key = 0;
  }
  /**
   * 判断当前索引游标指向的元素是否设置
   *
   * @see TestIterator::valid()
   * @return bool
   */
  public function valid() {
    echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';
    return isset($this->_test[$this->_key]);
  }
  /**
   * 将当前索引指向下一位置
   *
   * @see TestIterator::next()
   */
  public function next() {
    echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';
    $this->_key++;
  }
  /**
   * 返回当前索引游标指向的元素的值
   *
   * @see TestIterator::current()
   * @return value
   */
  public function current() {
    echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';
    return $this->_test[$this->_key];
  }
  /**
   * 返回当前索引值
   *
   * @return key
   * @see TestIterator::key()
   */
  public function key() {
    echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';
    return $this->_key;
  }
}
$iterator = new TestIterator();
foreach($iterator as $key => $value){
  echo "输出索引为{$key}的元素".":$value".'<br><br>';
}
?>

以上例子将输出:

第1步:执行 TestIterator::rewind
第2步:执行 TestIterator::valid
第3步:执行 TestIterator::current
第4步:执行 TestIterator::key
输出索引为0的元素:dog
第5步:执行 TestIterator::next
第6步:执行 TestIterator::valid
第7步:执行 TestIterator::current
第8步:执行 TestIterator::key
输出索引为1的元素:cat
第9步:执行 TestIterator::next
第10步:执行 TestIterator::valid
第11步:执行 TestIterator::current
第12步:执行 TestIterator::key
输出索引为2的元素:pig
第13步:执行 TestIterator::next
第14步:执行 TestIterator::valid

从以上例子可以看出,如果执行valid返回false,则循环就此结束。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个php作的文本留言本的例子(五)
Oct 09 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
PHP版国家代码、缩写查询函数代码
Aug 14 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
php实现的短网址算法分享
Jun 20 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
php实现网页端验证码功能
Jul 11 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP迭代器和生成器用法实例分析
Sep 28 PHP
php提高脚本性能的4个技巧
Aug 18 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 #PHP
PHP获取数组中指定的一列实例
Dec 27 #PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 #PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 #PHP
Laravel中使用Queue的最基本操作教程
Dec 27 #PHP
php获取ajax的headers方法与内容实例
Dec 27 #PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 #PHP
You might like
聊天室php&amp;mysql(二)
2006/10/09 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
python对象及面向对象技术详解
2016/07/19 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
Python列表对象实现原理详解
2019/07/01 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
机械工程师求职自我评价
2013/09/23 职场文书
自我评价范文
2013/12/22 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
车间主任岗位职责
2014/03/16 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
小学安全工作总结2015
2015/05/18 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
k-means & DBSCAN 总结
2021/04/27 Python
Python中的min及返回最小值索引的操作
2021/05/10 Python
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
Oracle锁表解决方法的详细记录
2022/06/05 Oracle