zoukankan      html  css  js  c++  java
  • SPL之Iterator(迭代器)接口

    前言:SPL是用于解决典型问题(standard problems)的一组接口与类的集合。

    <?php
    
    /**
     * Class MyIterator
     * 在 PHP 中,通常情况下遍历数组使用 foreach 来遍历。
     * Iterator 接口,只要实现了这个接口,对象就可以通过 foreach 来迭代
     * foreach对象时,依次调用:
     *  rewind() 重置到第一个元素
     *  valid() 检查当前位置是否有效
     *  current() 返回当前元素
     *  key() 返回当前元素的键
     *  next() 指向下一个元素
     */
    class MyIterator implements Iterator
    {
        private $arr;
        private $position;
    
        public function __construct(Array $arr)
        {
            $this->arr = $arr;
            $this->position = 0;
        }
    
        // 3、返回当前值
        public function current()
        {
            // TODO: Implement current() method.
            var_dump(__METHOD__);
            return $this->arr[$this->position];
        }
    
        // 5、把数组指针往下移
        public function next()
        {
            // TODO: Implement next() method.
            var_dump(__METHOD__);
            ++$this->position;
        }
    
        // 4、返回当前值的下标, 返回键名
        public function key()
        {
            // TODO: Implement key() method.
            var_dump(__METHOD__);
            return $this->position;
        }
    
        // 2、验证下标的值是否存在,存在则继续往下走 返回布尔值
        public function valid()
        {
            // TODO: Implement valid() method.
            var_dump(__METHOD__);
            return isset($this->arr[$this->position]);
        }
    
        // 1、重置数组的指针
        public function rewind()
        {
            // TODO: Implement rewind() method.
            var_dump(__METHOD__);
        }
    
    }
    $data = ['tom', 18, 'man'];
    $my = new MyIterator($data);
    echo '<pre>';
    foreach ($my as $k => $v){
        echo '<b>'.$k. ' => '.$v. '</b> ';
    }


    运行:
    string(18) "MyIterator::rewind"
    string(17) "MyIterator::valid"
    string(19) "MyIterator::current"
    string(15) "MyIterator::key"
    0 => tom string(16) "MyIterator::next"
    string(17) "MyIterator::valid"
    string(19) "MyIterator::current"
    string(15) "MyIterator::key"
    1 => 18 string(16) "MyIterator::next"
    string(17) "MyIterator::valid"
    string(19) "MyIterator::current"
    string(15) "MyIterator::key"
    2 => man string(16) "MyIterator::next"
    string(17) "MyIterator::valid"
     
  • 相关阅读:
    js的实例方法和静态方法分析
    简述TCP连接的建立与释放(三次握手、四次挥手)
    CSS中各种各样居中方法的总结
    队列的JS实现
    栈的JS实现
    单链表、循环链表的JS实现
    双向链表、双向循环链表的JS实现
    简述JavaScript对象、数组对象与类数组对象
    简述HTML DOM及其节点分类
    关于DOM对象与JQuery对象的那些事
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10415514.html
Copyright © 2011-2022 走看看