A little test about the function call order:
public functionkey()
{
echo__FUNCTION__,PHP_EOL;
returnparent::key();
}
public functionnext()
{
echo__FUNCTION__,PHP_EOL;
returnparent::next();
}
public functionrewind()
{
echo__FUNCTION__,PHP_EOL;
returnparent::rewind();
}
public functionvalid()
{
echo__FUNCTION__,PHP_EOL;
returnparent::valid();
}
}
classTestFilterIteratorextendsFilterIterator{
public functionaccept()
{
echo__FUNCTION__,PHP_EOL;
returntrue;
}
}$iterator= newArrayIterator(array('a','b','c'));
foreach (newTestFilterIterator(newTestIterator($iterator)) as$k=>$v) {
echoPHP_EOL;
}?>
This will output the following:
rewind
valid
key
accept
next
valid
key
accept
next
valid
key
accept
next
valid