diff options
author | Marcus Boerger <helly@php.net> | 2005-09-15 03:38:03 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2005-09-15 03:38:03 +0000 |
commit | a29501195f4d0fff6023ed53fc19bfb90d7a0151 (patch) | |
tree | dd36643d00206a3bd2fb227f035c18075d87171c /ext/spl/examples | |
parent | b4dd030782ae49646cdefa8435e6c8acbbf17745 (diff) | |
download | php-git-a29501195f4d0fff6023ed53fc19bfb90d7a0151.tar.gz |
- MFH: Add new files
Diffstat (limited to 'ext/spl/examples')
-rwxr-xr-x | ext/spl/examples/recursivearrayiterator.inc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/ext/spl/examples/recursivearrayiterator.inc b/ext/spl/examples/recursivearrayiterator.inc new file mode 100755 index 0000000000..305e54cad9 --- /dev/null +++ b/ext/spl/examples/recursivearrayiterator.inc @@ -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 |