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 md5下16位和32位的实现代码
Apr 09 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
php学习笔记之面向对象编程
Dec 29 PHP
PHP数组循环操作详细介绍 附实例代码
Feb 03 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
PDO::quote讲解
Jan 29 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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
下载文件的点击数回填
2006/10/09 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
详解VUE前端按钮权限控制
2019/04/26 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python多线程扫描端口(线程池)
2019/09/04 Python
大学毕业感言200字
2014/03/09 职场文书
赔偿协议书范本
2014/04/15 职场文书
科学发展观活动总结
2014/08/28 职场文书
领导班子整改方案
2014/10/25 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
归途列车观后感
2015/06/17 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL