Re: Clone FilterIterator/IteratorIterator?
| From: | Peter Oberst | Date: | Mon, 24 Mar 2014 21:04:15 +0000 |
| Subject: | Re: Clone FilterIterator/IteratorIterator? | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-323106@lists.php.net to get a copy of this message | ||
Oh sorry, it's too late and too mutch fiddeling with the testcase.
Corrected testcase:
<?php
class MyIterator extends FilterIterator {
public function accept() {
return true;
}
}
$arr = new ArrayObject(array());
$it1 = new MyIterator($arr->getIterator());
$it2 = clone $it1;
Throws Fatal error: Trying to clone an uncloneable object of class MyIterator
2014-03-24 21:48 GMT+01:00 Aziz Saleh <azizsaleh@gmail.com>:
>
>
>
> 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.
>