Annotation of embedaddon/php/ext/spl/internal/recursivefilteriterator.inc, revision 1.1.1.1
1.1 misho 1: <?php
2:
3: /** @file recursivefilteriterator.inc
4: * @ingroup SPL
5: * @brief class RecursiveFilterIterator
6: * @author Marcus Boerger
7: * @date 2003 - 2009
8: *
9: * SPL - Standard PHP Library
10: */
11:
12: /** @ingroup SPL
13: * @brief Iterator to filter recursive iterators
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: abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator
31: {
32: /** @param $it the RecursiveIterator to filter
33: */
34: function __construct(RecursiveIterator $it)
35: {
36: parent::__construct($it);
37: }
38:
39: /** @return whether the current element has children
40: */
41: function hasChildren()
42: {
43: return $this->getInnerIterator()->hasChildren();
44: }
45:
46: /** @return an iterator for the current elements children
47: *
48: * @note the returned iterator will be of the same class as $this
49: */
50: function getChildren()
51: {
52: if (empty($this->ref))
53: {
54: $this->ref = new ReflectionClass($this);
55: }
56: return $this->ref->newInstance($this->getInnerIterator()->getChildren());
57: }
58:
59: private $ref;
60: }
61:
62: ?>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>