迭代器模式(Iterator),又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。
当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。
PHP标准库(SPL)中提供了迭代器接口 Iterator,要实现迭代器模式,实现该接口即可。
示例代码:
class String implements Iterator {
private $string;
public function __construct($string)
{
$this->string = $this->strToArray($string);
}
private function strToArray($string,$l=0) {
if ($l > 0) {
$ret = array();
$len = mb_strlen($string, "UTF-8");
for ($i = 0; $i < $len; $i += $l) {
$ret[] = mb_substr($string, $i, $l, "UTF-8");
}
return $ret;
}
return preg_split("//u", $string, -1, PREG_SPLIT_NO_EMPTY);
}
public function current()
{
return current($this->string);
}
public function next()
{
return next($this->string);
}
public function key()
{
key($this->string);
}
public function valid()
{
if(key($this->string) === null) {
return false;
} else {
return true;
}
}
public function rewind()
{
reset($this->string);
}
}
//client
$string = new String('这个是什么213jdjlf');
foreach ($string as $k => $v) {
echo $v."\n";
}
这个设计模式实际业务会很少用到,在定义自己的数据类型时可能会用到, PHP里面的数组已经很逆天了,基本不需要搞自己的数据类型。
网友评论