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调用Webservice思路及源码分享
Jun 04 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
php header函数的常用http头设置
Jun 25 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
php实现文章置顶功能的方法
Oct 20 PHP
PHP文件与目录操作示例
Dec 24 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 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 如何向 MySQL 发送数据
2006/10/09 PHP
PHP 中的批处理的实现
2007/06/14 PHP
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python eval函数原理及用法解析
2020/11/14 Python
家居设计专业个人自荐信范文
2013/11/26 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
招聘专员岗位职责
2014/03/07 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
首次购房证明
2015/06/19 职场文书
经营场所证明范本
2015/06/19 职场文书
六年级语文教学反思
2016/03/03 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python