Heim  >  Artikel  >  php教程  >  预定义接口-迭代器Iterator

预定义接口-迭代器Iterator

WBOY
WBOYOriginal
2016-06-13 09:35:12802Durchsuche

<?<span>php
</span><span>/*</span><span>
可在内部迭代自己的外部迭代器或类的接口。
Iterator  extends Traversable  {
abstract public mixed current  ( void )
abstract public scalar key  ( void )
abstract public void next  ( void )
abstract public void rewind  ( void )
abstract public boolean valid  ( void )
}
</span><span>*/</span>
<span>class</span>  myIterator  <span>implements</span><span>  Iterator{
    </span><span>private</span>  <span>$position</span>  =  0<span> ;
    </span><span>private</span>  <span>$array</span>  = <span>array</span><span>(
         </span>"firstelement" ,
         "secondelement" ,
         "lastelement" ,<span>
    );  

    </span><span>public</span> <span>function</span><span>  __construct () {
         </span><span>$this</span> -> position  =  0<span> ;
    }

    </span><span>function</span>  <span>rewind</span><span> () {
         </span><span>var_dump</span> ( <span>__METHOD__</span><span> );
         </span><span>$this</span> -> position  =  0<span> ;
    }

    </span><span>function</span>  <span>current</span><span> () {
         </span><span>var_dump</span> ( <span>__METHOD__</span><span> );
        </span><span>return</span>  <span>$this</span> -> <span>array</span> [ <span>$this</span> -><span> position ];
    }

    </span><span>function</span>  <span>key</span><span> () {
         </span><span>var_dump</span> ( <span>__METHOD__</span><span> );
         </span><span>return</span>  <span>$this</span> -><span> position ;
    }

    </span><span>function</span>  <span>next</span><span> () {
         </span><span>var_dump</span> ( <span>__METHOD__</span><span> );
        </span>++ <span>$this</span> -><span> position ;
        
    }

    </span><span>function</span><span>  valid () {
         </span><span>var_dump</span> ( <span>__METHOD__</span><span> );
        </span><span>return</span> <span>isset</span>( <span>$this</span> -> <span>array</span> [ <span>$this</span> -><span> position ]);
    }
}

 </span><span>$it</span>  = <span>new</span><span>  myIterator ;

</span><span>foreach</span>( <span>$it</span>  <span>as</span>  <span>$key</span>  =>  <span>$value</span><span> ) {
     </span><span>print_r</span>( <span>$key</span>.'/'.<span>$value</span><span> );
     </span><span>echo</span>  "<br />"<span> ;
}

</span><span>/*</span><span>
foreach循环第一次执行前,先调用rewind,返回到迭代器的第一个元素,开始位置也可控制
第二步执行valid检查当前位置是否有效,有效继续往下执行,无效则循环停止
第三步执行current返回当前元素的值
第四步执行key 返回当前元素的键
第五步:第一次循环结束后执行next向前移动到下一个元素开始下一轮的循环(紧接着跳过rewind,进行valid检测当前位置)
往下next,valid,current,key循环依次执行,直到valid到无效的位置
</span><span>*/</span>

内容是自己总结的,有不对的地方,希望能指出!

更多内容后续补充...

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn