什么迭代器模式
迭代器模式(Iterator),又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。 迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。
PHP标准库(SPL)中提供了迭代器接口 Iterator,要实现迭代器模式,实现该接口即可。
应用场景
当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。
PHP 代码实现
<?php
/**
* 迭代器模式
* Class MyIterator
*/
class MyIterator implements Iterator
{
private $var = array();
public function __construct($array)
{
if (is_array($array)) {
$this->var = $array;
}
}
public function rewind() {
echo "倒回第一个元素";
echo "<br>";
reset($this->var);
}
public function current() {
$var = current($this->var);
echo "当前元素: $var";
echo "<br>";
return $var;
}
public function key() {
$var = key($this->var);
echo "当前元素的键: $var";
echo "<br>";
return $var;
}
public function next() {
$var = next($this->var);
echo "移向下一个元素: $var";
echo "<br>";
return $var;
}
public function valid() {
$var = $this->current() !== false;
echo "检查有效性: {$var}";
echo "<br>";
return $var;
}
}
//=======================迭代器模式测试===============================
$values = array(1,2,3);
$it = new MyIterator($values);
foreach ($it as $k => $v) {
print "此时键值对 -- key $k: value $v";
echo "<hr>";
}
//结果
//倒回第一个元素
//当前元素: 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
//移向下一个元素:
//当前元素:
//检查有效性: