Annotation of embedaddon/php/ext/spl/internal/recursivefilteriterator.inc, revision 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>