<?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";
}
?>
Die obige Routine gibt Folgendes aus:
Zurückspulen
Aktuell: 1
Gültig: 1
Aktuell: 1
Taste: 0
0: 1
Weiter: 2
Aktuell: 2
Gültig: 1
Aktuell: 2
Taste: 1
1: 2
Weiter: 3
aktuell: 3
gültig: 1
aktuell: 3
Schlüssel: 2
2: 3
nächster:
aktuell:
gültig:
Aber ich verstehe die Reihenfolge, in der die gekapselten Methoden im Iterator aufgerufen werden, nicht. Kann es jemand erklären? Der Quellcode der Iterator-Klasse kann nicht gefunden werden. Warum wird zuerst die valid()-Methode aufgerufen?
不都是你自己定义的顺序么?
你用了next函数,current函数这些函数去移动了数组的指针
迭代器只是提供一个大家约定好的遍历内部数据集合的格式而已,内部实现(即内部遍历顺序)你可以正序,倒序,随机排序,都可以