• 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"
     
  • 相关阅读:
    20165105 学习基础和C语言基础调查
    2017-2018网络攻防第四周作业
    2017-2018-2 20165233 实验三 敏捷开发与XP实践
    20165233 2017-2018-2 《Java程序设计》第九周学习总结
    Linux学习笔记(一)
    第三周学习总结
    数据结构C++,线性表学习
    uname()系统调用学习
    cd
    go连接数据库并执行文件中的sql语句
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10415514.html
Copyright © 2020-2023  润新知