I have an object that implements ArrayAccess, Iterator and Countable. That produces a nigh-perfect array masking. I can access it with offsets ($object[foo]
), I can throw it into a foreach
-loop, and many other things.
But what I can't do is give it to the native array iterator functions (next()
, reset()
, current()
, key()
), even though I have implemented the required methods from Iterator. PHP seems to stubbornly try to iterate through its member variables, and entirely disregards the iterator-methods.
Is there an interface that would hook the object to the remaining array-traversing-functions, or am I stuck with what I have?
Update: IteratorAggregate doesn't seem to be the answer either. While it is used in foreach
-loops, the basic array iterator functions don't call the methods.
Recent changes in PHP prevent ArrayIterators form being manipulated using the standard array functions (reset, next, etc).
This should be restored soon: http://news.php.net/php.internals/42015