PHP5 Iterators

I’m late to the PHP5 party. When it was released I kicked the tyres, wrote a few sample scripts, but lacked the time and resources to deploy it properly.

But as I’m about to start a large new project, it’s time to bite the bullet!

I’m playing around with Xapian, which is a C++ search library with a nice object oriented interface, but the PHP bindings for it exposed it as a series of functions, so I set about writing a wrapper to mimic the “real” API.

I noticed several classes implemented an iterator, so I thought it would be an opportunity to try and use the Iterator interface, and found a great article on PHP5 Iterators over at Scatterism.

Within a few minutes, I was able to turn a slightly ugly Xapian loop into a nice foreach – behold!

Before

$mseti = MSet_begin($matches);
$end=MSet_end($matches);
while (! MSetIterator_equals($mseti, $end)) {
        $doc=MSetIterator_get_document($mseti);
	$percent=MSetIterator_get_percent($mseti);
	$docdata=Document_get_data($doc);
	MSetIterator_next($mseti);
}

And after!

$mseti=$matches->begin();
foreach($mseti as $doc){
	$percent=$mseti->get_percent();
	$docdata=$doc->get_data();
}

Proof that iterators really do wash whiter and shift the stains inferior patterns leave behind :)

2 thoughts on “PHP5 Iterators

  1. Olly Betts

    The Xapian PHP wrappers use the functions rather than an OO approach because that’s all SWIG currently supports for PHP5.

    It would be much nicer if the wrappers provided an object interface similar to the C++ API. It would also be great to be able to provide proper PHP iterators.

    If you’re willing to share your work so far, I’d like to take a look at how easy it would be to integrate into xapian’s php bindings.

  2. lordelph Post author

    I intend to share the binding classes I’ve written – I’m writing a new article about them which I’ll post in a few days.

Comments are closed.