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文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
php 文件缓存函数
Oct 08 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
javascript延时加载之defer测试
2012/12/28 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
Node.js的进程管理的深入理解
2019/01/09 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
办护照工作证明范本
2014/01/14 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
职工食堂管理制度
2015/08/06 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
python套接字socket通信
2022/04/01 Python
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js