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抓即时股票信息
Oct 09 PHP
PHP 数组实例说明
Aug 18 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
destoon数据库表说明汇总
Jul 15 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
Nov 30 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
详解PHP Swoole与TCP三次握手
May 27 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执行速度全攻略(上)
2006/10/09 PHP
BBS(php &amp; mysql)完整版(三)
2006/10/09 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
php格式文件打开的四种方法
2018/02/24 PHP
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
python实现连接mongodb的方法
2015/05/08 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
python中subprocess批量执行linux命令
2018/04/27 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
python编写实现抽奖器
2020/09/10 Python
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2014年村党支部工作总结
2014/12/04 职场文书