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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
PHP 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
php实现mysql事务处理的方法
Dec 25 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
Feb 23 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 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实现 data url的图片生成与保存
2016/12/04 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
js数组的操作详解
2013/03/27 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
js实现网页随机验证码
2020/10/19 Javascript
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python性能优化技巧
2015/03/09 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
详解python:time模块用法
2019/03/25 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
Python实现SMTP邮件发送
2020/06/16 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
nohup的用法
2012/11/26 面试题
几个判断型的面试题
2012/07/03 面试题
幼儿教师研修感言
2014/02/12 职场文书
法人代表授权委托书
2014/04/08 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
小学科学教学计划
2015/01/21 职场文书