3v4l.org

run code in 300+ PHP versions simultaneously
<?php $INDENT = 0; trait ShowMethodCalls { private function show($method) { global $INDENT; printf("%s%s::%s\n", str_repeat("> ", $INDENT++), __CLASS__, $method); $return = parent::$method(); $INDENT--; return $return; } public function accept() { return $this->show(__FUNCTION__); } public function current() { return $this->show(__FUNCTION__); } public function key() { return $this->show(__FUNCTION__); } public function next() { return $this->show(__FUNCTION__); } public function rewind() { return $this->show(__FUNCTION__); } public function valid() { return $this->show(__FUNCTION__); } } class TestFilterIterator extends FilterIterator { public function accept() { echo __FUNCTION__, PHP_EOL; return (bool)parent::current(); } } class ArrayIterator_ extends ArrayIterator { use ShowMethodCalls; } class TestFilterIterator_ extends TestFilterIterator { use ShowMethodCalls; } class LimitIterator_ extends LimitIterator { use ShowMethodCalls; } $iterator = new ArrayIterator_(array('0', 'a', '0', 'b', '0', 'c', '0', 'd')); $iterator = new TestFilterIterator_($iterator); $iterator = new LimitIterator_($iterator, 0, 2); foreach ($iterator as $k => $v) { var_dump([$k, $v]); }

preferences:
45.9 ms | 402 KiB | 5 Q