看看PHP迭代器的内部执行过程
来源:互联网 发布:京都议定书 知乎 编辑:程序博客网 时间:2024/04/29 17:21
下面我们来了解如何实现一个自定义的迭代器,然后再开始慢慢理解迭代器的内部工作原理。先来看一个官方的例子:
<?phpclass 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 检查当前位置的有效性
如果不是很清楚迭代器的内容工作流程,可以查看下面的迭代器对数组的遍历过程:
<?php/*** @author nicesunboy@gmail.com*/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移向下一个元素: 当前元素: 检查有效性:
现在就很清晰了吧?
9 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内部执行流程的再…
- HDU 2553 - N皇后问题
- 关于jquery+ajax+json+ssh框架整合,数值异步的问题(暂时解决方案--延迟加载(lazy)改为急加载)
- 计数排序
- UIViewController中view的释放过程
- Java实现DOS中的Copy命令
- 看看PHP迭代器的内部执行过程
- inputstream.read(buff)和outputstream.write(buff)
- las点转为Shapefile文件,获取高程信息
- QComboBox显示图片
- 基于事件的程序设计技术简单事例
- 计算几何基础——矢量和叉积
- 矩阵快速幂求斐波那契数列 poj3070
- hdu4826(三维DP)
- POJ 2286 The Rotation Game