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 cookie的操作实现代码(登录)
Dec 29 PHP
php中对2个数组相加的函数
Jun 24 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
PHP程序员的技术成长规划
Mar 25 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
php插入mysql数据返回id的方法
May 31 PHP
Yii支持多域名cors原理的实现
Dec 05 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 文件上传模型,支持多文件上传
2009/08/13 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
帝国cms常用标签汇总
2015/07/06 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
记录一次完整的react hooks实践
2019/03/11 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
js实现左右轮播图
2020/01/09 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
python中defaultdict的用法详解
2017/06/07 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
python如何实现视频转代码视频
2019/06/17 Python
实例详解Python装饰器与闭包
2019/07/29 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
Python pip 常用命令汇总
2020/10/19 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
经典c++面试题六
2012/01/18 面试题
2015年计生工作总结范文
2015/04/24 职场文书
自荐信范文
2019/05/20 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android