预定义接口-迭代器Iterator

<?php

/*

可在内部迭代自己的外部迭代器或类的接口。

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 )

}

*/

class  myIterator  implements  Iterator{

    private  $position  =  0 ;

    private  $array  = array(

         "firstelement" ,

         "secondelement" ,

         "lastelement" ,

    );  



    public function  __construct () {

         $this -> position  =  0 ;

    }



    function  rewind () {

         var_dump ( __METHOD__ );

         $this -> position  =  0 ;

    }



    function  current () {

         var_dump ( __METHOD__ );

        return  $this -> array [ $this -> position ];

    }



    function  key () {

         var_dump ( __METHOD__ );

         return  $this -> position ;

    }



    function  next () {

         var_dump ( __METHOD__ );

        ++ $this -> position ;

        

    }



    function  valid () {

         var_dump ( __METHOD__ );

        return isset( $this -> array [ $this -> position ]);

    }

}



 $it  = new  myIterator ;



foreach( $it  as  $key  =>  $value ) {

     print_r( $key.'/'.$value );

     echo  "<br />" ;

}



/*

foreach循环第一次执行前,先调用rewind,返回到迭代器的第一个元素,开始位置也可控制

第二步执行valid检查当前位置是否有效,有效继续往下执行,无效则循环停止

第三步执行current返回当前元素的值

第四步执行key 返回当前元素的键

第五步:第一次循环结束后执行next向前移动到下一个元素开始下一轮的循环(紧接着跳过rewind,进行valid检测当前位置)

往下next,valid,current,key循环依次执行,直到valid到无效的位置

*/

最下面的注释是自己总结的,有不对的地方,希望能指出!

更多内容后续补充...

 

你可能感兴趣的:(iterator)