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 反向排序和随机排序代码
Jun 30 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
PHP错误机制知识汇总
Mar 24 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
php post json参数的传递和接收处理方法
May 31 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
PHP7 参数处理机制修改
Mar 09 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中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
php文件包含的几种方式总结
2019/09/19 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
初学Javascript的一些总结
2008/11/03 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
简单谈谈python的反射机制
2016/06/28 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
Django对models里的objects的使用详解
2019/08/17 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
致短跑运动员广播稿
2014/01/09 职场文书
中学教师管理制度
2014/01/14 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
质量承诺书怎么写
2014/05/24 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
总结一些Java常用的加密算法
2021/06/11 Java/Android