预定义接口-迭代器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到无效的位置
*/

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

更多内容后续补充...

优质内容筛选与推荐>>
1、C realloc
2、Oracle用imp导入dmp文件记录一下
3、autocad.net中判断当前被激活的空间
4、用oledb导出数据到excel
5、儿童商城


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号