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输出控制功能在简繁体转换中的应用
Oct 09 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
php5.3 注意事项说明
Jul 01 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
PHP执行linux命令常用函数汇总
Feb 02 PHP
php实现简单爬虫的开发
Mar 28 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
PHP实现根据密码长度显示安全条
Jul 04 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
用session做客户验证时的注意事项
2006/10/09 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP答题类应用接口实例
2015/02/09 PHP
jQuery 操作option的实现代码
2011/03/03 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
python使用chardet判断字符串编码的方法
2015/03/13 Python
python 读写中文json的实例详解
2017/10/29 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
Python基于template实现字符串替换
2020/11/27 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
自荐信如何“自荐”
2013/10/24 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
Python面向对象之成员相关知识总结
2021/06/24 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS