helly Wed Sep 14 23:48:39 2005 EDT Modified files: /php-src/ext/spl/examples recursivearrayiterator.inc Log: - MFB http://cvs.php.net/diff.php/php-src/ext/spl/examples/recursivearrayiterator.inc?r1=1.1&r2=1.2&ty=u Index: php-src/ext/spl/examples/recursivearrayiterator.inc diff -u /dev/null php-src/ext/spl/examples/recursivearrayiterator.inc:1.2 --- /dev/null Wed Sep 14 23:48:39 2005 +++ php-src/ext/spl/examples/recursivearrayiterator.inc Wed Sep 14 23:48:38 2005 @@ -0,0 +1,55 @@ +<?php + +/** @file recursivearrayiterator.inc + * @ingroup Examples + * @brief class RecursiveArrayIterator + * @author Marcus Boerger + * @date 2003 - 2005 + * + * SPL - Standard PHP Library + */ + +/** @ingroup Examples + * @brief A recursive array iterator + * @author Marcus Boerger + * @version 1.0 + * @since PHP 6.0 + * + * Passes the RecursiveIterator interface to the inner Iterator and provides + * the same functionality as FilterIterator. This allows you to skip parents + * and all their childs before loading them all. You need to care about + * function getChildren() because it may not always suit your needs. The + * builtin behavior uses reflection to return a new instance of the exact same + * class it is called from. That is you extend RecursiveFilterIterator and + * getChildren() will create instance of that class. The problem is that doing + * this does not transport any state or control information of your accept() + * implementation to the new instance. To overcome this problem you might + * need to overwrite getChildren(), call this implementation and pass the + * control vaules manually. + */ +class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator +{ + /** @return whether the current element has children + */ + function hasChildren() + { + return is_array($this->current()); + } + + /** @return an iterator for the current elements children + * + * @note the returned iterator will be of the same class as $this + */ + function getChildren() + { + if (empty($this->ref)) + { + $this->ref = new ReflectionClass($this); + } + return $this->ref->newInstance($this->current()); + } + + private $ref; +} + +?> \ No newline at end of file
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php