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版(5)
Oct 09 PHP
php下载远程文件类(支持断点续传)
Nov 14 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
drupal 代码实现URL重写
May 04 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
wamp安装后自定义配置的方法
Aug 23 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
Nov 22 PHP
PHP中的一些常用函数收集
May 26 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
PHP批量删除jQuery操作
Jul 23 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日期处理函数 整型日期格式
2011/01/12 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
js中的string.format函数代码
2020/08/11 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
python连接mysql调用存储过程示例
2014/03/05 Python
python获取代码运行时间的实例代码
2018/06/11 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
python3实现名片管理系统
2020/11/29 Python
基于Python实现用户管理系统
2019/02/26 Python
详解如何设置Python环境变量?
2019/05/13 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
2014年施工员工作总结
2014/11/18 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
给朋友的赠语
2015/06/23 职场文书