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中实现中文字符进制转换原理分析
Dec 06 PHP
php利用curl抓取新浪微博内容示例
Apr 27 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
php函数与传递参数实例分析
Nov 15 PHP
php内存缓存实现方法
Jan 24 PHP
php取得字符串首字母的方法
Mar 25 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 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 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
ECMAScript 基础知识
2007/06/29 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
js 原型对象和原型链理解
2017/02/09 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
python使用socket远程连接错误处理方法
2015/04/29 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python中的global关键字的使用方法
2019/08/20 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Python类继承和多态原理解析
2020/02/05 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
宠物店的创业计划书范文
2014/01/11 职场文书
应届生求职信范文
2014/05/26 职场文书
历史学专业求职信
2014/06/19 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
浅谈Redis的事件驱动模型
2022/05/30 Redis
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android