For anyone interested in how exactly does a iterator work in a foreach:
<?php
class SomeIterator implements Iterator {/*...implement...*/}
$it=new SomeIterator();
foreach($it as $key => $val) {
print "{$key}=>{$val}\n";
}
// works exactly the same as
$it=new SomeIterator();
for(
$it->rewind();
$it->valid();
$val=$it->current(), $key=$it->key(), $it->next()
) {
print "{$key}=>{$val}\n";
}
// and if someone forgot how for(;;) works...
$it=new SomeIterator();
$it->rewind;
while($it->valid()) {
$val=$it->current();
$key=$it->key();
$it->next();
print "{$key}=>{$val}\n";
}
?>
The Iterator interface
導入
Interface for external iterators or objects that can be iterated themselves internally.
クラス概要
例1 Basic usage
This example demonstrates in which order methods are called when foreach()ing over an iterator.
<?php
class myIterator implements Iterator {
private $position = 0;
private $array = array(
"firstelement",
"secondelement",
"lastelement",
);
public function __construct() {
$this->position = 0;
}
function rewind() {
var_dump(__METHOD__);
$this->position = 0;
}
function current() {
var_dump(__METHOD__);
return $this->array[$this->position];
}
function key() {
var_dump(__METHOD__);
return $this->position;
}
function next() {
var_dump(__METHOD__);
++$this->position;
}
function valid() {
var_dump(__METHOD__);
return isset($this->array[$this->position]);
}
}
$it = new myIterator;
foreach($it as $key => $value) {
var_dump($key, $value);
echo "\n";
}
?>
上の例の出力は、たとえば 以下のようになります。
string(18) "myIterator::rewind" string(17) "myIterator::valid" string(19) "myIterator::current" string(15) "myIterator::key" int(0) string(12) "firstelement" string(16) "myIterator::next" string(17) "myIterator::valid" string(19) "myIterator::current" string(15) "myIterator::key" int(1) string(13) "secondelement" string(16) "myIterator::next" string(17) "myIterator::valid" string(19) "myIterator::current" string(15) "myIterator::key" int(2) string(11) "lastelement" string(16) "myIterator::next" string(17) "myIterator::valid"
目次
- Iterator::current — Return the current element.
- Iterator::key — Return the key of the current element.
- Iterator::next — Move forward to next element.
- Iterator::rewind — Rewind the Iterator to the first element.
- Iterator::valid — Checks if current position is valid.
Iterator
http://chanibal.net
29-Jan-2009 06:11
29-Jan-2009 06:11
