3v4l.org

run code in 300+ PHP versions simultaneously
<?php class IteratorWithFilter { public $generator; public function __construct(array $data) { $this->generator = new \ArrayIterator($data); } public function filter(Closure $closure) { $closure = clone $closure; $closure = $closure->bindTo($this); $this->generator = new \CallbackFilterIterator($this->generator, static function () {}); $this->generator->cl = $closure; // this assignment prevents GC as well return $this; } } function createIterator(Closure $closure) { $iter = new IteratorWithFilter([['a'], ['b']]); return $iter->filter($closure); } function createClosure() { return function ($row) { return true; }; } $closure = createClosure(); for ($i = 0; $i < 50 * 1000; $i++) { createIterator($closure); if (($i % 1000) === 0) { // gc_collect_cycles(); // explicit GC does not help... echo round(memory_get_usage() / (1024 * 1024), 3) . " MiB\n"; } }

preferences:
36.99 ms | 402 KiB | 5 Q