Annotation of embedaddon/php/ext/spl/internal/recursivearrayiterator.inc, revision 1.1.1.1
1.1 misho 1: <?php
2:
3: /** @file recursivearrayiterator.inc
4: * @ingroup Examples
5: * @brief class RecursiveArrayIterator
6: * @author Marcus Boerger
7: * @date 2003 - 2009
8: *
9: * SPL - Standard PHP Library
10: */
11:
12: /** @ingroup SPL
13: * @brief A recursive array iterator
14: * @author Marcus Boerger
15: * @version 1.0
16: * @since PHP 5.1
17: *
18: * Passes the RecursiveIterator interface to the inner Iterator and provides
19: * the same functionality as FilterIterator. This allows you to skip parents
20: * and all their childs before loading them all. You need to care about
21: * function getChildren() because it may not always suit your needs. The
22: * builtin behavior uses reflection to return a new instance of the exact same
23: * class it is called from. That is you extend RecursiveFilterIterator and
24: * getChildren() will create instance of that class. The problem is that doing
25: * this does not transport any state or control information of your accept()
26: * implementation to the new instance. To overcome this problem you might
27: * need to overwrite getChildren(), call this implementation and pass the
28: * control vaules manually.
29: */
30: class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
31: {
32: /** @return whether the current element has children
33: */
34: function hasChildren()
35: {
36: return is_array($this->current());
37: }
38:
39: /** @return an iterator for the current elements children
40: *
41: * @note the returned iterator will be of the same class as $this
42: */
43: function getChildren()
44: {
45: if ($this->current() instanceof self)
46: {
47: return $this->current();
48: }
49: if (empty($this->ref))
50: {
51: $this->ref = new ReflectionClass($this);
52: }
53: return $this->ref->newInstance($this->current());
54: }
55:
56: private $ref;
57: }
58:
59: ?>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>