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 🙂