加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP迭代器和迭代的实现与使用技巧分析

发布时间:2022-07-01 12:47:10 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP迭代器和迭代的实现与使用方法,结合实例形式分析了PHP迭代器的概念、原理、定义与使用方法,需要的朋友可以参考下。 本文实例讲述了PHP迭代器和迭代的实现与使用方法,分享给大家供大家参考,具体如下: PHP的面向对象引擎提供了一个非
  这篇文章主要介绍了PHP迭代器和迭代的实现与使用方法,结合实例形式分析了PHP迭代器的概念、原理、定义与使用方法,需要的朋友可以参考下。
 
  本文实例讲述了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
  */

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读