function beginChildren()
    {
        echo __METHOD__ . "(" . $this->getDepth() . ")\n";
        parent::beginChildren();
    }
    function endChildren()
    {
        echo __METHOD__ . "(" . $this->getDepth() . ")\n";
        parent::endChildren();
    }
}
$p = 0;
$it = new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2);
foreach ($it as $k => $v) {
    if (is_array($v)) {
        $v = join('', $v);
    }
    echo "{$k}=>{$v}\n";
    if ($p++ == 5) {
        echo "===BREAK===\n";
        break;
    }
}
echo "===FOREND===\n";
$it->rewind();
echo "===CHECK===\n";
var_dump($it->valid());
var_dump($it->current() == "a");
?>
===DONE===