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 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP 身份验证方面的函数
Oct 11 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
解析php函数method_exists()与is_callable()的区别
Jun 21 PHP
php中stream(流)的用法
Mar 25 PHP
php猴子选大王问题解决方法
May 12 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
CI框架数据库查询之join用法分析
May 18 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 PHP
PHP常量define和const的区别详解
May 18 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 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
十大“创意”战术!
2020/03/04 星际争霸
php 字符串函数收集
2010/03/29 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
Vue内容分发slot(全面解析)
2017/08/19 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
python list语法学习(带例子)
2013/11/01 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
员工培训邀请函
2014/02/02 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
新年爱情寄语
2014/04/08 职场文书
升学宴来宾致辞
2015/07/27 职场文书
开业庆典致辞
2015/08/01 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
正则表达式基础与常用验证表达式
2022/06/16 Javascript
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript