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 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
《PHP编程最快明白》第三讲:php数组
Nov 01 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
功能强大的php分页函数
Jul 20 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
PHP字符串与数组处理函数用法小结
Jan 07 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代码审核的详细介绍
2013/06/13 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
浅析vue数据绑定
2017/01/17 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
Keras loss函数剖析
2020/07/06 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
python爬虫基础之urllib的使用
2020/12/31 Python
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
体育教师个人的自我评价
2014/02/16 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
2014年度培训工作总结
2014/11/27 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
flex弹性布局详解
2022/03/20 HTML / CSS
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android