资讯专栏INFORMATION COLUMN

PHP遍历接口Iterator详解

chengtao1633 / 731人阅读

摘要:从手册中查到的解释是当一个实现了接口的对象,被遍历时,会自动调用这些方法。调用的循序是下面来看一下简单的代码以上会输出

从手册中查到的解释是:

Iterator extends Traversable {
/* Methods */
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 )
}

当一个实现了Iterator接口的对象,被foreach遍历时,会自动调用这些方法。调用的循序是:
rewind() -> valid() -> current() -> key() -> next()

下面来看一下简单的代码:

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) {  
    var_dump($key, $value);  
    echo "---------------------------"."
";
}  

以上会输出:

/Users/thanatos/Web/study/blean.php:15:string "myIterator::rewind" (length=18)
/Users/thanatos/Web/study/blean.php:35:string "myIterator::valid" (length=17)
/Users/thanatos/Web/study/blean.php:20:string "myIterator::current" (length=19)
/Users/thanatos/Web/study/blean.php:25:string "myIterator::key" (length=15)
/Users/thanatos/Web/study/blean.php:43:int 0
/Users/thanatos/Web/study/blean.php:43:string "firstelement" (length=12)
---------------------------
/Users/thanatos/Web/study/blean.php:30:string "myIterator::next" (length=16)
/Users/thanatos/Web/study/blean.php:35:string "myIterator::valid" (length=17)
/Users/thanatos/Web/study/blean.php:20:string "myIterator::current" (length=19)
/Users/thanatos/Web/study/blean.php:25:string "myIterator::key" (length=15)
/Users/thanatos/Web/study/blean.php:43:int 1
/Users/thanatos/Web/study/blean.php:43:string "secondelement" (length=13)
---------------------------
/Users/thanatos/Web/study/blean.php:30:string "myIterator::next" (length=16)
/Users/thanatos/Web/study/blean.php:35:string "myIterator::valid" (length=17)
/Users/thanatos/Web/study/blean.php:20:string "myIterator::current" (length=19)
/Users/thanatos/Web/study/blean.php:25:string "myIterator::key" (length=15)
/Users/thanatos/Web/study/blean.php:43:int 2
/Users/thanatos/Web/study/blean.php:43:string "lastelement" (length=11)
---------------------------
/Users/thanatos/Web/study/blean.php:30:string "myIterator::next" (length=16)
/Users/thanatos/Web/study/blean.php:35:string "myIterator::valid" (length=17)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23266.html

相关文章

  • ES6的Iterator对象详解

    摘要:实现原理创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。具体来说,就是返回一个包含和两个属性的对象。接口部署在对象的属性上可以调用这个属性,就得到遍历器对象。 Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。 第一次调用指针对象的next方法,可以将指针指向数据结构的第一...

    KoreyLee 评论0 收藏0
  • 带你了解集合世界的fail-fast机制 和 CopyOnWriteArrayList 源码详解

    摘要:体现的就是适配器模式。数组对象集合世界中的机制机制集合世界中比较常见的错误检测机制,防止在对集合进行遍历过程当中,出现意料之外的修改,会通过异常暴力的反应出来。而在增强循环中,集合遍历是通过进行的。 前言 学习情况记录 时间:week 2 SMART子目标 :Java 容器 记录在学习Java容器 知识点中,关于List的重点知识点。 知识点概览: 容器中的设计模式 从Array...

    young.li 评论0 收藏0
  • PHP设计模式之迭代器模式

    摘要:概念迭代器模式,又叫做游标模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚集结构提供如开始下一个是否结束当前哪一项等统一的接口。 概念 迭代器模式(Iterator),又叫做游标(Cursor)模式。提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就...

    陆斌 评论0 收藏0
  • PHP SPL 笔记

    摘要:界面包含四个必须部署的方法下面就是一个部署界面的实例使用方法如下运行结果如下可以看到,虽然是一个,但是完全可以像那样操作。示例如下类也支持类方法和方法类和类类和类,只支持遍历一维数组。 这几天,我在学习PHP语言中的SPL。 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记。不然记不住,以后要用的时候,还是要从头学起。 由于这是供自己参考的笔记,不是教...

    hoohack 评论0 收藏0
  • 详解NodeList 和 HTMLCollection 和 Array

    摘要:展开的属性后发现,继承于一个对象,而这个对象又继承于对象。这证实了我们对的猜想。是比较新的模型,相比更加完善,不光有元素,还有节点和。关于,和的关系,就是长得像,有个别相似的功能,但是是完全不一样的东西。 Array,NodeList, HTMLCollection这三个概念和它们之间的关系有很多做了几年前端的同学都搞不清楚,经常遇到但是又感觉很陌生,剪不断理还乱的感觉。今天咱们就来理...

    xietao3 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<