<?php
class misc_class {
public $var1 = "abc";
public $var2 = 123;
public $var3 = "def";
private $var4 = 456;
}
$test = new misc_class;
foreach($test as $key=>$value)
echo "$key = $value<br />\n";
?>
Output
var1 = abc
var2 = 123
var3 = def
You can overload PHP's internal iterator by redefining the rewind(), current(), key(), next() and valid() methods like this:
<?php
class MyIterator implements Iterator {
private $var = array();
public function __construct($array) {
if (is_array($array)) {
$this->var = $array;
}
}
public function rewind() {
echo "rewinding<br />\n";
reset($this->var);
}
public function current() {
$var = current($this->var);
echo "current: $var<br />\n";
return $var;
}
public function key() {
$var = key($this->var);
echo "key: $var<br />\n";
return $var;
}
public function next() {
$var = next($this->var);
echo "next: $var<br />\n";
return $var;
}
public function valid() {
$var = $this->current() !== false;
echo "valid: {$var}<br />\n";
return $var;
}
}
$it = new MyIterator(array(1,2,3));
foreach ($it as $key=>$value) {
echo "$key: $value<br />\n";
}
?>
Output
rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:
If you just want to override some of them, use the IteratorAggregate class.