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>