<?php 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 ‘one_‘ . $this->array[$this->position] . ‘_two‘; } 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 $value; echo "\n"; }
从上面的执行结果看,迭代器的工作流程是这样的:
1.首先指向数组首
2.判断是否有效
3.获取当前值
4.获取当前key
5.进入循环,进行当前指针加一操作
6.判断是否有效(无效停止)
7.获取当前值
8.获取当前key
9.重复5步骤
为什么要使用迭代器?
该示例中,是用对象做了封装,简化了foreach语句的复杂程度,或是专注于流程,而细节则交给迭代器。
迭代器它本身的实现都是通过C拓展的,所以自己编写的遍历和PHP自身提供的迭代器是有性能的差异第二个,因为遍历的是对象而不是数组,免不了我们在遍历的时候遇到不少麻烦,即使我们解决了,也不能确保我们应用到的算法是最好的
时间: 2024-10-08 22:02:36