Hi Marc Please take a look at the thread headed 'Iterator Class/foreach Logic Flaw?' - you will find your hasMore() returns TRUE when place on the last element, but (in the exammple code below), there are only three elements - therefore when on the third element, hasMore() should return false...
This thread is a different (possible) bug - the foreach() construct silently stops all php processing when called using a class member as the iterator. Regards Philip Example code: <?php class MyIterator implements Iterator { private $container = array('one', 'two', 'three'); //Incorrectly returns true on last element public function hasMore(){ if (key($this->container) === NULL ) return FALSE; if ( (key($this->container)) <= (count($this->container)-1) ) { return TRUE; } else { return FALSE; } } public function rewind() { reset($this->container); } function key() { return key($this->container); } function current() { return current($this->container); } function next() { next($this->container); } } $i = new MyIterator(); foreach($i as $key => $value) { echo '<br />Current value: ' . $value . '. Calling hasMore() : '; var_dump($i->hasMore()); } echo ' - last row *should* return false.'; ?> Marc Dembogurski wrote: > Hi, > > I used to implement the hasMore() method like this: > > public function hasMore(){ > if (key($this->container) === NULL ) return FALSE; > if ( (key($this->container)) <= > (count($this->container)-1) ) > { > return TRUE; > }else > return FALSE; > } > > And I think that is what hasMore means, "If an array > has more elements from the current position". > > But it should be available at anywhere Users want > use it. Not only at foreach. > > Regards, > Marc > > > __________________________________ > Do you Yahoo!? > Yahoo! Search - Find what you’re looking for faster > http://search.yahoo.com -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php