PHP迭代器和迭代的实现与使用方法分析


Posted in PHP onApril 19, 2018

本文实例讲述了PHP迭代器和迭代的实现与使用方法。分享给大家供大家参考,具体如下:

PHP的面向对象引擎提供了一个非常聪明的特性,就是,可以使用foreach()方法通过循环方式取出一个对象的所有属性,就像数组方式一样,代码如下:

class Myclass{
  public $a = 'php';
  public $b = 'onethink';
  public $c = 'thinkphp';
}
$myclass = new Myclass();
//用foreach()将对象的属性循环出来
foreach($myclass as $key.'=>'.$val){
  echo '$'.$key.' = '.$val."<br/>";
}
/*返回
  $a = php
  $b = onethink
  $c = thinkphp
*/

如果需要实现更加复杂的行为,可以通过一个iterator(迭代器)来实现

//迭代器接口
interface MyIterator{
  //函数将内部指针设置回数据开始处
  function rewind();
  //函数将判断数据指针的当前位置是否还存在更多数据
  function valid();
  //函数将返回数据指针的值
  function key();
  //函数将返回将返回当前数据指针的值
  function value();
  //函数在数据中移动数据指针的位置
  function next();
}
//迭代器类
class ObjectIterator implements MyIterator{
  private $obj;//对象
  private $count;//数据元素的数量
  private $current;//当前指针
  function __construct($obj){
    $this->obj = $obj;
    $this->count = count($this->obj->data);
  }
  function rewind(){
    $this->current = 0;
  }
  function valid(){
    return $this->current < $this->count;
  }
  function key(){
    return $this->current;
  }
  function value(){
    return $this->obj->data[$this->current];
  }
  function next(){
    $this->current++;
  }
}
interface MyAggregate{
  //获取迭代器
  function getIterator();
}
class MyObject implements MyAggregate{
  public $data = array();
  function __construct($in){
    $this->data = $in;
  }
  function getIterator(){
    return new ObjectIterator($this);
  }
}
//迭代器的用法
$arr = array(2,4,6,8,10);
$myobject = new MyObject($arr);
$myiterator = $myobject->getIterator();
for($myiterator->rewind();$myiterator->valid();$myiterator->next()){
  $key = $myiterator->key();
  $value = $myiterator->value();
  echo $key.'=>'.$value;
  echo "<br/>";
}
/*返回
  0=>2
  1=>4
  2=>6
  3=>8
  4=>10
*/

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 和 MySQL 基础教程(三)
Oct 09 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php上传大文件失败的原因及应对策略
Oct 20 PHP
php遍历解析xml字符串的方法
May 05 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
php实现等比例压缩图片
Jul 26 PHP
PHP实现的操作数组类库定义与用法示例
May 24 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 #PHP
php-app开发接口加密详解
Apr 18 #PHP
PHPMAILER实现PHP发邮件功能
Apr 18 #PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 #PHP
php无限级评论嵌套实现代码
Apr 18 #PHP
PHP实现负载均衡下的session共用功能
Apr 17 #PHP
PHP代码重构方法漫谈
Apr 17 #PHP
You might like
Php注入点构造代码
2008/06/14 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
深入理解Python中字典的键的使用
2015/08/19 Python
全面了解python字符串和字典
2016/07/07 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
python中字符串的操作方法大全
2018/06/03 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
初中生学习的自我评价
2013/11/14 职场文书
房地产融资计划书
2014/01/10 职场文书
工厂实习感言
2014/01/14 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
护士求职自荐信
2015/03/25 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python
Java对文件的读写操作方法
2022/04/29 Java/Android