Chaining Iterators
An important iterator feature is the ability to chain them together so they can act as a series of filters. For example, you can use iterators to restrict results to words that match a particular regular expression or to return only the first 10 results.
I
call these types of iterators meta-iterators. SPL comes with two
meta-iterators: FilterIterator
, to filter results,
and LimitIterator
, to limit results.
Filtering Results with FilterIterator
FilterIterator
is an abstract
class
that implements all the methods of a regular
Iterator
. However, it has a twistâyou must
define an
accept( )
method that
controls whether an item should be returned or filtered out from the
results.
Unlike DirectoryIterator
, which is directly
instantiable, you cannot create a new
FilterIterator
. Instead, you must
extend
it and implement accept( )
.
Hereâs an example that filters by a Perl-compatible regular expression:
class RegexFilter extends FilterIterator { protected $regex; public function _ _construct(Iterator $it, $regex) { parent::_ _construct($it); $this->regex = $regex; } public function accept( ) { return preg_match($this->regex, $this->current( )); } }
RegexFilter
takes two arguments in its
constructor: an Iterator
to filter and a regular
expression pattern to use as a filter. The first parameter is passed
on to the parent FilterIterator
constructor,
because it handles the iteration for your class.
The regular expression (regex for short) is stored in a
protected
property, ...
Get Upgrading to PHP 5 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.