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中的日期及时间
Nov 23 PHP
谈谈PHP的输入输出流
Feb 14 PHP
一个基于PDO的数据库操作类
Mar 24 PHP
php读取EXCEL文件 php excelreader读取excel文件
Dec 06 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
非常重要的php正则表达式详解
Jan 04 PHP
CI框架数据库查询之join用法分析
May 18 PHP
PHP邮箱验证示例教程
Jun 01 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 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的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
html读出文本文件内容
2007/01/22 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
美国著名手表网站:Timepiece
2017/11/15 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
探矿工程师自荐信
2014/01/24 职场文书
致裁判员加油稿
2014/02/08 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
内乡县衙导游词
2015/02/05 职场文书
python字符串常规操作大全
2021/05/02 Python
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技