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 相关文章推荐
使用TinyButStrong模板引擎来做WEB开发
Mar 16 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
Sep 23 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
PHP date函数常用时间处理方法
May 11 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
PHP简单实现防止SQL注入的方法
Mar 13 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 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
如何利用php+mysql保存和输出文件
2006/10/09 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
EsLint入门学习教程
2017/02/17 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
对node.js中render和send的用法详解
2018/05/14 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Python OpenCV获取视频的方法
2018/02/28 Python
python删除字符串中指定字符的方法
2018/08/13 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
全陪导游欢迎词
2014/01/17 职场文书
小学端午节活动方案
2014/03/13 职场文书
本科生自荐信
2014/06/18 职场文书
2014年环保工作总结
2014/11/26 职场文书
教师党员个人自我评价
2015/03/04 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server