看看PHP迭代器的内部执行过程
来源:互联网 发布:青岛知行 编辑:程序博客网 时间:2024/06/08 06:14
下面我们来了解如何实现一个自定义的迭代器,然后再开始慢慢理解迭代器的内部工作原理。先来看一个官方的例子:
class myIterator implements Iterator { private $position = 0; private $array = array( "first_element", "second_element", "last_element", ); 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) {echo '输出键值:'; var_dump($key, $value);//echo $key; echo "\n";}
程序运行输出:
string(18) "myIterator::rewind"string(17) "myIterator::valid"string(19) "myIterator::current"string(15) "myIterator::key"输出键值:int(0)string(13) "first_element"string(16) "myIterator::next"string(17) "myIterator::valid"string(19) "myIterator::current"string(15) "myIterator::key"输出键值:int(1)string(14) "second_element"string(16) "myIterator::next"string(17) "myIterator::valid"string(19) "myIterator::current"string(15) "myIterator::key"输出键值:int(2)string(12) "last_element"string(16) "myIterator::next"string(17) "myIterator::valid"
一般的迭代器内部需要下面的方法:
- Iterator::current — Return the current element 返回当前元素
- Iterator::key — Return the key of the current element 返回当前元素的键
- Iterator::next — Move forward to next element 移向下一个元素
- Iterator::rewind — Rewind the Iterator to the first element 重新回到第一个元素
- Iterator::valid — Checks if current position is valid 检查当前位置的有效性
如果不是很清楚迭代器的内容工作流程,可以查看下面的迭代器对数组的遍历过程:
/*** @author 简明现代魔法 http://www.nowamagic.net*/class MyIterator implements Iterator{ private $var = array(); public function __construct($array) { if (is_array($array)) { $this->var = $array; } } public function rewind() { echo "倒回第一个元素\n"; reset($this->var); } public function current() { $var = current($this->var); echo "当前元素: $var\n"; return $var; } public function key() { $var = key($this->var); echo "当前元素的键: $var\n"; return $var; } public function next() { $var = next($this->var); echo "移向下一个元素: $var\n"; return $var; } public function valid() { $var = $this->current() !== false; echo "检查有效性: {$var}\n"; return $var; }}$values = array(1,2,3);$it = new MyIterator($values);foreach ($it as $k => $v) { print "此时键值对 -- key $k: value $v\n\n";}
程序运行结果:
倒回第一个元素当前元素: 1检查有效性: 1当前元素: 1当前元素的键: 0此时键值对 -- key 0: value 1移向下一个元素: 2当前元素: 2检查有效性: 1当前元素: 2当前元素的键: 1此时键值对 -- key 1: value 2移向下一个元素: 3当前元素: 3检查有效性: 1当前元素: 3当前元素的键: 2此时键值对 -- key 2: value 3移向下一个元素: 当前元素: 检查有效性:
现在就很清晰了吧?
延伸阅读
此文章所在专题列表如下:
- 看看PHP迭代器的内部执行过程
- 用PHP迭代器来实现一个斐波纳契数列
- PHP SPL,被遗落的宝石
- PHP数据结构预热:PHP的迭代器
- PHP Predefined Interfaces 预定义接口
0 0
- 看看PHP迭代器的内部执行过程
- 看看PHP迭代器的内部执行过程
- 看看PHP迭代器的内部执行过程以及用PHP迭代器来实现一个斐波纳契数列
- php迭代器的执行过程
- php的执行过程
- php的执行过程
- PHP的执行过程
- Struts2的执行过程和内部的执行过程
- 一起看看MonoBehavior内部事件执行顺序
- php程序的执行过程
- flush与session的内部执行的过程详解
- show parameter 内部执行过程
- PHP内部执行JavaScript代码
- php session内部执行流程的再次剖析
- 【session内部机制】PHP的session_set_save_handler 执行机制
- Php session内部执行流程的再…
- Php session内部执行流程的再…
- Php session内部执行流程的再…
- 曲线拟合
- 随机抽样一致算法
- 在Android中定制Switch控件
- 集合和JSON之间的转换一
- PHP数据结构预热:PHP的迭代器
- 看看PHP迭代器的内部执行过程
- PHP 直接插入排序
- HDU 1255 覆盖的面积[离散化 + 扫描线 + 线段树]
- Spring MVC 学习笔记 data binding
- iOS7 UIWebView内存泄露问题解决方法
- PHP哈希表碰撞攻击原理
- 如何解决PHP哈希函数的碰撞
- WService
- 关于git和maven使用的几点思考