zoukankan      html  css  js  c++  java
  • 预定义接口-迭代器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到无效的位置
    */

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

    更多内容后续补充...

  • 相关阅读:
    转载 消灭程序员需要百年吗?(重要参考)
    转载的一篇,代码规范
    自改的删除数据库中所有外键语句
    [转]批量禁用外键后,清空表数据
    我的分组分页查询语句
    Yii 分页方法总结
    25个Apache性能优化技巧推荐
    浅谈MindSpore的动态Shape
    C++开发总结 A
    Linux环境下开发常用命令汇总 A
  • 原文地址:https://www.cnblogs.com/dytl/p/3727582.html
Copyright © 2011-2022 走看看