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 文件上传模型,支持多文件上传
Aug 13 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
基于PHP生成静态页的实现方法
May 10 PHP
php数组合并array_merge()函数使用注意事项
Jun 19 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
php微信公众号开发模式详解
Nov 28 PHP
php头像上传预览实例代码
May 02 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 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导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
Python简单进程锁代码实例
2015/04/27 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
Python实现仿射密码的思路详解
2020/04/23 Python
python实现canny边缘检测
2020/09/14 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
党支部换届选举方案
2014/05/08 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
个人批评与自我批评
2014/10/15 职场文书
团委工作总结2015
2015/04/02 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
Python如何识别银行卡卡号?
2021/06/10 Python
Django中session进行权限管理的使用
2021/07/09 Python