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 相关文章推荐
elgg 获取文件图标地址的方法
Mar 20 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PHP中phar包的使用教程
Jun 14 PHP
Yii2语言国际化自动配置详解
Aug 22 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中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
浅析php工厂模式
2014/11/25 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
为什么要有struct关键字
2012/05/08 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
写演讲稿要注意的六件事
2014/01/14 职场文书
小学生获奖感言范文
2014/02/02 职场文书
企业趣味活动方案
2014/08/21 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
创业计划之特色精品店
2019/08/12 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书