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部分常见问题总结
Mar 27 PHP
用来给图片加水印的PHP类
Apr 09 PHP
坏狼的PHP学习教程之第1天
Jun 15 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
10款实用的PHP开源工具
Oct 23 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 PHP
php用wangeditor3实现图片上传功能
Aug 22 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
jQuery实现跨域
2015/02/03 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
Python的高级Git库 Gittle
2014/09/22 Python
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
利用Python爬取可用的代理IP
2016/08/18 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
Python编程中类与类的关系详解
2019/08/08 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
财务人员担保书
2014/05/13 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
大学生党性分析材料
2014/12/19 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers