### 1.Iterator 作为返回类型和函数参数
`注意:iterator 的“i”是小写的,顶级接口,Iterator是它的子孙接口 `
**该函数可以被foreach 遍历**
~~~
<?php
// Iterable iterable
/**
* @param iterable $iterator iterable作为参数
*
*/
function index1(iterable $iterator){
var_dump($iterator);
}
$data=new ArrayObject([1,3,4]);
index1( $data);
// object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(3) { [0]=> int(1) [1]=> int(3) [2]=> int(4) } } 2
/**
* @param int $vsh
* @return iterator iterator作为返回值
*
*/
function gen(int $vsh):iterator {
for ($vsh;$vsh<10;$vsh++) {
yield $vsh;
}
}
foreach (gen(2) as $value){
echo $value."<br>";
}
//输出
//3
//4
//5
//6
//7
//8
//9
~~~
### 子类或者子接口
[接口Traversable继承Iterator接口](%E6%8E%A5%E5%8F%A3Traversable%E7%BB%A7%E6%89%BFIterator%E6%8E%A5%E5%8F%A3.md)
- 空白目录
- iterable接口
- 接口Traversable继承Iterator接口
- 类 RarArchive 继承Traversable接口
- 类SimpleXMLElement继承Traversable接口
- 类SimpleXMLIterator 继承SimpleXMLElement类
- 类IntlRuleBasedBreakIterator实现Traversable接口
- 类IntlCodePointBreakIterator实现Traversable接口
- 类DocResult 实现BaseResult和Traversable
- 类Result 实现\BaseResult和Traversable
- 类RowResult实现\BaseResult 和Traversable
- 类SqlStatementResult 实现BaseResult 和Traversable
- 接口IteratorAggregate 继承Traversable
- 类DOMNodeList 实现IteratorAggregate, Countable
- 类DOMNamedNodeMap 实现IteratorAggregate, Countable