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下将XML转换为数组
Jan 01 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
Apr 25 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
php判断访问IP的方法
Jun 19 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
基于PHP实现等比压缩图片大小
Mar 04 PHP
php session_decode函数用法讲解
May 26 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
php读取3389的脚本
2014/05/06 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
Python Logging 日志记录入门学习
2018/06/02 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
经济贸易系求职信
2014/08/04 职场文书
运动会演讲稿300字
2014/08/25 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
施工安全协议书
2016/03/22 职场文书
React配置子路由的实现
2021/06/03 Javascript