<?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