Re: Clone FilterIterator/IteratorIterator?

From: Date: Mon, 24 Mar 2014 20:48:44 +0000
Subject: Re: Clone FilterIterator/IteratorIterator?
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-323105@lists.php.net to get a copy of this message
On Mon, Mar 24, 2014 at 4:37 PM, Peter Oberst <peter.oberst0@gmail.com>wrote: > Hi, > > I want to use an Iterator that returns an the inner iterator, with an > additional FilterIterator applied. > The returned iterator should be separated from my inner iterator, to > avoid errors like 'ArrayIterator::next(): Array was modified outside'. > To avoid this, I think it might be the best to simply clone the inner > iterator. > > Unfortunatly, if the innerIterator is an FilterIterator, so cloning > will throw an exception: > PHP Fatal error: Call to undefined method ArrayIterator::getIterator() > > Is there a good reason why i can't clone a FilterIterator? > > Testcase: > <?php > > class MyIterator extends FilterIterator { > public function accept() { > return true; > } > } > > $arr = new ArrayObject(array()); > $it1 = new MyIterator($arr->getIterator()); > $it2 = $it1->getIterator(); > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > Not sure why you came to that conclusion, but the error you are getting is because MyIterator ($it1) extends FilterIterator extends IteratorIterator implements OuterIterator implements OuterIterator OuterIterator extends Iterator extends Traversable, none which have a getIterator() method implemented. Sorry for duplicate email, forgot to reply all.

« previous php.general (#323105) next »