Re: Iterator Class/foreach Logic Flaw? (was: Cannot use foreach() with $this->my

php.internals

Marc Dembogurski

22 years ago
Three elements array: Current value: one. Calling hasMore() : bool(true) Current value: two. Calling hasMore() : bool(true) Current value: three. Calling hasMore() : bool(true) - last row *should* return false. I see, You mean that the hasMore is being used just to assure the current position is valid. While it should be only used to confirm if there are more elements or not. Right? In the case of foreach, it works because it only increments the pointer after get the element (which is valid), but as a general hasMore() method it is faulty because it returns TRUE at the last element and FALSE only after the cursor has reached the "end+1" position. I agree that it should be modified so isValid() and hasMore() would have diferent meanings (the correct ones). Regards, Marc.
>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
__________________________________ Do you Yahoo!? Yahoo! Search - Find what you?re looking for faster http://search.yahoo.com

Philip Fletcher

22 years ago
> > You mean that the hasMore is being used just to > assure the current position is valid. While it should > be only used to confirm if there are more elements or > not. Right? >
Absolutely. To avoid lots of confusion/bug reports, the current hasMore() should be renamed to isValid(). Philip