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 相关文章推荐
杏林同学录(五)
Oct 09 PHP
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
服务器web工具 php环境下
Dec 29 PHP
关于IIS php调用com组件的权限问题
Jan 11 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
初识PHP
Sep 28 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
PHP图形计数器程序显示网站用户浏览量
Jul 20 PHP
ThinkPHP 5.1 跨域配置方法
Oct 11 PHP
Yii框架安装简明教程
May 15 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;java(二)
2006/10/09 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
9个比较实用的php代码片段
2016/03/15 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
详谈python read readline readlines的区别
2017/09/22 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
Python的log日志功能及设置方法
2019/07/11 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
严以律己学习心得体会
2016/01/13 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫