PHP迭代器的内部执行过程详解
发布:smiling 来源: PHP粉丝网 添加日期:2020-06-18 10:15:07 浏览: 评论:0
下面我们来了解如何实现一个自定义的迭代器,然后再开始慢慢理解迭代器的内部工作原理。先来看一个官方的例子。
- 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.phpfensi.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
- 移向下一个元素:
- 当前元素:
- 检查有效性:
现在就很清晰了吧?
Tags: PHP迭代器
相关文章
- ·PHP迭代器和迭代的实现与使用方法分析(2021-09-11)
- ·PHP基于SPL实现的迭代器模式示例(2021-09-12)
- ·php和C#的yield迭代器实现方法对比分析(2021-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)