美文网首页
认识php的iterator interface

认识php的iterator interface

作者: misaka去年夏天 | 来源:发表于2017-07-24 18:44 被阅读0次

    简单来说,PHP的iterator,就是扩展了foreach循环对象的功能。你可以在循环对象时,自定义一些属性和方法,让对象也能像数组一样foreach循环。

    <?php
    
    class It implements Iterator {
    
        private $offset;
        private $array = [
            'first val',
            'second val',
            'third val'
        ];
    
        public function __construct() {
            $this->offset = 0;
        }
    
        /**
         * 第一次循环时的第一步,调用此方法,设置offset为0
         * @return [type] [description]
         */
        public function rewind() {
            var_dump(__METHOD__);
            echo "<br />";
            $this->offset = 0;
        }
    
        /**
         * 每次循环的第二步,调用此方法,检查offset是否存在,不存在也就是offset到尽头时,返回FALSE并终止循环
         * @return [type] [description]
         */
        public function valid() {
            var_dump(__METHOD__);
            echo "<br />";
            return isset($this->array[$this->offset]);
        }
    
        /**
         * 每次循环的第三步,调用此方法,返回当前offset对应的value
         * @return [type] [description]
         */
        public function current() {
            var_dump(__METHOD__);
            echo "<br />";
            return $this->array[$this->offset];
        }
    
        /**
         * 每次循环的第四步,调用此方法,返回当前offset值
         * @return [type] [description]
         */
        public function key() {
            var_dump(__METHOD__);
            echo "<br />";
            return $this->offset;
        }
    
        /**
         * 从第二次开始循环开始,每一次循环的第一步,调用此方法,让offset自增
         * @return function [description]
         */
        public function next() {
            var_dump(__METHOD__);
            echo "<br />";
            ++$this->offset;
        }
    
    
    }
    
    $it = new It();
    
    foreach ($it as $key => $value) {
        echo $key . ' :' . $value;
        echo "<br /><br />";
    }
    
    

    结果如下:

    string(10) "It::rewind" 
    string(9) "It::valid" 
    string(11) "It::current" 
    string(7) "It::key" 
    0 :first val
    
    string(8) "It::next" 
    string(9) "It::valid" 
    string(11) "It::current" 
    string(7) "It::key" 
    1 :second val
    
    string(8) "It::next" 
    string(9) "It::valid" 
    string(11) "It::current" 
    string(7) "It::key" 
    2 :third val
    
    string(8) "It::next" 
    string(9) "It::valid" 
    

    相关文章

      网友评论

          本文标题:认识php的iterator interface

          本文链接:https://www.haomeiwen.com/subject/zizbkxtx.html