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程序
Oct 09 PHP
实时抓取YAHOO股票报价的代码
Oct 09 PHP
模仿OSO的论坛(四)
Oct 09 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
php+iframe 实现上传文件功能示例
Mar 04 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 header函数分析详解
2011/08/06 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
javascript实现图片轮换动作方法
2020/08/07 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
Python实现快速多线程ping的方法
2015/07/15 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
房地产营销活动策划方案
2014/09/15 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
考研英语辞职信
2015/05/13 职场文书