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
聊天室php&amp;mysql(六)
Oct 09 PHP
dedecms中显示数字验证码的修改方法
Mar 21 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
php excel类 phpExcel使用方法介绍
Aug 21 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
初识php MVC
Sep 10 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
php实现的简单中文验证码功能示例
Jan 03 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 移除数组重复元素的一点说明
2008/11/27 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
python冒泡排序简单实现方法
2015/07/09 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
python简单实现AES加密和解密
2019/03/28 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
迟到检讨书大全
2014/01/25 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
Python中re模块的元字符使用小结
2022/04/07 Python
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL