Object Iteration
PHP 5 provides a way for objects to be defined so it is possible
to iterate through a list of items, with, for example a statement. By default, all
public properties will be used for the iteration.
Simple Object Iteration
$value) {
print "$key => $value\n";
}
]]>
Will output:
value 1
var2 => value 2
var3 => value 3
]]>
As the output shows, the
iterated through each public variable that is defined. To take it
a step further you can implement one of PHP 5's
internal named
Iterator. This allows the object to decide what
and how the object will be iterated.
Object Iteration implenting Iterator
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";
}
]]>
Will output:
You can also define your class so that it doesn't have to define
all the Iterator functions by simply implementing
the PHP 5 IteratorAggregate interface.
Object Iteration implenting IteratorAggregate
items);
}
public function add($value) {
$this->items[$this->count++] = $value;
}
}
$coll = new MyCollection();
$coll->add('value 1');
$coll->add('value 2');
$coll->add('value 3');
foreach ($coll as $key => $val) {
echo "key/value: [$key -> $val]\n\n";
}
?>
]]>
Will output:
value 1]
next: value 2
current: value 2
valid: 1
current: value 2
key: 1
key/value: [1 -> value 2]
next: value 3
current: value 3
valid: 1
current: value 3
key: 2
key/value: [2 -> value 3]
next:
current:
valid:
]]>