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