zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP迭代器的内部执行过程详解

PHP执行迭代 详解 过程 内部
2023-06-13 09:15:11 时间

复制代码代码如下:


classmyIteratorimplementsIterator{
   private$position=0;
   private$array=array(
       "first_element",
       "second_element",
       "last_element",
   ); 

   publicfunction__construct(){
       $this->position=0;
   }

   functionrewind(){
       var_dump(__METHOD__);
       $this->position=0;
   }

   functioncurrent(){
       var_dump(__METHOD__);
       return$this->array[$this->position];
   }

   functionkey(){
       var_dump(__METHOD__);
       return$this->position;
   }

   functionnext(){
       var_dump(__METHOD__);
       ++$this->position;
   }

   functionvalid(){
       var_dump(__METHOD__);
       returnisset($this->array[$this->position]);
   }
}

$it=newmyIterator;

foreach($itas$key=>$value){
 echo"输出键值:";
   var_dump($key,$value);
 //echo$key;
   echo"\n";
}


程序运行输出:
复制代码代码如下:

string(18)"myIterator::rewind"
string(17)"myIterator::valid"
string(19)"myIterator::current"
string(15)"myIterator::key"
输出键值:int(0)
string(13)"first_element"

string(16)"myIterator::next"
string(17)"myIterator::valid"
string(19)"myIterator::current"
string(15)"myIterator::key"
输出键值:int(1)
string(14)"second_element"

string(16)"myIterator::next"
string(17)"myIterator::valid"
string(19)"myIterator::current"
string(15)"myIterator::key"
输出键值:int(2)
string(12)"last_element"

string(16)"myIterator::next"
string(17)"myIterator::valid"


一般的迭代器内部需要下面的方法:
Iterator::current—Returnthecurrentelement返回当前元素
Iterator::key—Returnthekeyofthecurrentelement返回当前元素的键
Iterator::next—Moveforwardtonextelement移向下一个元素
Iterator::rewind—RewindtheIteratortothefirstelement重新回到第一个元素
Iterator::valid—Checksifcurrentpositionisvalid检查当前位置的有效性
如果不是很清楚迭代器的内容工作流程,可以查看下面的迭代器对数组的遍历过程:
复制代码代码如下:
/**
*@author简明现代魔法http://www.nowamagic.net
*/
classMyIteratorimplementsIterator
{
    private$var=array();

    publicfunction__construct($array)
    {
        if(is_array($array)){
           $this->var=$array;
        }
    }

    publicfunctionrewind(){
        echo"倒回第一个元素\n";
       reset($this->var);
    }

    publicfunctioncurrent(){
       $var=current($this->var);
        echo"当前元素:$var\n";
        return$var;
    }

    publicfunctionkey(){
       $var=key($this->var);
        echo"当前元素的键:$var\n";
        return$var;
    }

    publicfunctionnext(){
       $var=next($this->var);
        echo"移向下一个元素:$var\n";
        return$var;
    }

    publicfunctionvalid(){
       $var=$this->current()!==false;
        echo"检查有效性:{$var}\n";
        return$var;
    }
}

$values=array(1,2,3);
$it=newMyIterator($values);

foreach($itas$k=>$v){
    print"此时键值对--key$k:value$v\n\n";
}


程序运行结果:
复制代码代码如下:
倒回第一个元素
当前元素:1
检查有效性:1
当前元素:1
当前元素的键:0
此时键值对--key0:value1

移向下一个元素:2
当前元素:2
检查有效性:1
当前元素:2
当前元素的键:1
此时键值对--key1:value2

移向下一个元素:3
当前元素:3
检查有效性:1
当前元素:3
当前元素的键:2
此时键值对--key2:value3

移向下一个元素:
当前元素:
检查有效性:


现在就很清晰了吧?