<?php
class Collection extends ArrayObject {
protected $iterator;
public function getIterator() {
// Well, this is a heavy object to make, let's memoize it
if (!isset($this->iterator)) {
$this->iterator = new ArrayIterator($this);
}
return $this->iterator;
}
public function __destruct() {
unset($this->iterator);
}
}
gc_enable();
foreach (range(1, 5000000) as $i) {
$collection = new Collection([ 'foo', 'bar' ]);
foreach ($collection as $item) {
echo $item;
}
unset($collection);
}
Deprecated: Return type of Collection::getIterator() should either be compatible with ArrayObject::getIterator(): Iterator, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/oufok on line 6
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 134217736 bytes) in /in/oufok on line 22
Process exited with code 255.
Output for 8.1.0 - 8.1.28
Deprecated: Return type of Collection::getIterator() should either be compatible with ArrayObject::getIterator(): Iterator, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/oufok on line 6
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 268435464 bytes) in /in/oufok on line 22
Process exited with code 255.
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 268435464 bytes) in /in/oufok on line 22
Process exited with code 255.
Output for 7.3.32 - 7.3.33, 8.0.13
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 268435464 bytes) in /in/oufok on line 22
Process exited with code 255.