使对象可以像数组一样进行foreach循环,要求属性必须是私有。
<?php
class MyIterator implements Iterator
{
private $var = array();
public function __construct($array)
{
if (is_array($array)) {
$this->var = $array;
}
}
public function rewind() {
echo "rewinding\n";
reset($this->var);
}
public function current() {
$var = current($this->var);
echo "current: $var\n";
return $var;
}
public function key() {
$var = key($this->var);
echo "key: $var\n";
return $var;
}
public function next() {
$var = next($this->var);
echo "next: $var\n";
return $var;
}
public function valid() {
$var = $this->current() !== false;
echo "valid: {$var}\n";
return $var;
}
}
$values = array(1,2,3);
$it = new MyIterator($values);
foreach ($it as $a => $b) {
print "$a: $b\n";
}
/*
输出:
rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:
*/
?>
迭代器有一个简单的和经常被看到的接口
<?php
function Iterator($array) // Constructor. Takes array to be traversed as a parameter. 构造函数。
使需要遍历的数组作为一个参数
function reset() // Sets internal pointer to the first element 设置内部指针指向第一个元素
function end() // Sets internal pointer to the last element 设置内部指针指向最后一个元素
function seek($position) // Sets internal pointer to desired position 设置内部指针指向一个指定的元素
function next() // Returns next element in the iteration 返回后一个元素
function previous() // Returns previous element in the iteration 返回前一个元素
?>
分享到:
相关推荐
主要介绍了Java Iterator接口实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
所谓Iterator模式,即是...3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数
其迭代行为可以挂载到待比较对象的外部, 此外,外部迭代器往往用来支撑内部迭代器的实现。 注意区别于内部迭代器Iterable和枚举器Enumeration 外部迭代器的设计背后体现着迭代器设计模式的思想 (二)源码分析 该...
经常会用到有类似父子关系的这个对象,比如在我现在的一个项目中,有订单对象,在一个订单下又包含多个产品,这时我就想用 Iterator模式来封装订单下的产品,在dot Net中的IEnumerator接口就是用来实现迭代的,...
一个iterator_jsonDemo. 1.通过iterable接口和iterator实现迭代输出。2.通过JSONArray实现输出(自带json相关jar包)。供参考。
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。 ———————————————— 版权声明:本文为CSDN博主「网络冒险家」的原创文章,遵循CC 4.0 BY...
yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。 yield生成器允许你 在 foreach 代码块中写代码来迭代一组...
就想总结一下,一些可能会用到的新特性。...通过添加 yield 关键字支持了 generators,Generators 提供了一个更简单的方法实现迭代器,不需要实现 Iterator 接口。 <?php function xrange($start, $limit, $step
生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会...
主要介绍了Java集合Iterator迭代接口的实现方法,非常不错,具有参考借鉴家,对Java 结合iterator知识感兴趣的朋友一起看看吧
具体迭代器(Concrete Iterator):实现迭代器接口,对聚合对象进行遍历。 聚合对象(Aggregate):定义创建迭代器对象的接口。 具体聚合对象(Concrete Aggregate):实现聚合对象的接口,返回具体迭代器对象。 ...
该库为符合 PSR-4 的文件夹结构创建迭代器,并在其中搜索接口/类的所有实现/扩展。 抽象实现和类本身将被忽略。 用法 $ iterator = new \ Scheb \ ImplementationIterator ( "src/" , "Root\Namespace" , "Some\...
下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理。 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛型...
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。 迭代器 it 的两个基本操作是 next 、hasNext 和 remove。 调用 it.next() 会返回迭代器的下一个元素,...
分享给大家供大家参考,具体如下: ...实现getIterator方法时必须返回一个实现了Iterator接口的类的实例。 例子说明: <?php /** * 利用聚合式迭代器,并返回一个实现了Iterator接口的类的实例 *
Traversable用于检测一个类是否可以使用 foreach 进行遍历,这是一个无法在 PHP 脚本中实现的内部引擎接口,实际编程中我们使用Iterator接口或者IteratorAggregate接口来实现遍历。 接口摘要: Traversable { } ...
实现 ArrayAccess/Iterator/Countable 接口的内置数组和对象的抽象。 这个库旨在抽象出 PHP 内置数组和不同接口对象之间的差异,可以实现以挂钩到数组语法。 PHP 有许多用于数组的内置函数,但它们只适用于内置...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2.List(列表<接口>)以线性方式存储,有序,允许重复主要实现类有LinkList(采用链表数据结构)和ArrayList(代表可大可小的数组) Eg: ...
迭代器:这是用于定义所有其他迭代器类的接口的基类 NullIterator:此迭代器由表达式树类创建,该表达式树类没有要迭代的子级(例如操作数) BinaryIterator:此迭代器由具有两个子代(例如运算符)的表达式树类...