diff options
| -rwxr-xr-x | ext/spl/examples/recursivefilteriterator.inc | 58 | ||||
| -rwxr-xr-x | ext/spl/internal/recursivefilteriterator.inc | 25 | ||||
| -rwxr-xr-x | ext/spl/spl.php | 41 |
3 files changed, 56 insertions, 68 deletions
diff --git a/ext/spl/examples/recursivefilteriterator.inc b/ext/spl/examples/recursivefilteriterator.inc deleted file mode 100755 index 44e1bbcb99..0000000000 --- a/ext/spl/examples/recursivefilteriterator.inc +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -/** @file recursivefilteriterator.inc - * @ingroup Examples - * @brief class RecursiveFilterIterator - * @author Marcus Boerger - * @date 2003 - 2005 - * - * SPL - Standard PHP Library - */ - -/** @ingroup Examples - * @brief A recursive Filter - * @author Marcus Boerger - * @version 1.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. - */ -abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator -{ - /*! The constructor takes a RecursiveIterator - */ - function __construct(RecursiveIterator $it) - { - $this->ref = new ReflectionClass($this); - parent::__construct($it); - } - - /*! return whether the inner iterator has children - */ - function hasChildren() - { - return $this->getInnerIterator()->hasChildren(); - } - - /*! \return children as instance of derived RecursiveFilterIterator class - * - * \see RecursiveFilterIterator - */ - function getChildren() - { - return $this->ref->newInstance($this->getInnerIterator()->getChildren()); - } - - private $ref; -} - -?>
\ No newline at end of file diff --git a/ext/spl/internal/recursivefilteriterator.inc b/ext/spl/internal/recursivefilteriterator.inc index 3cb3de06f3..b1271aef87 100755 --- a/ext/spl/internal/recursivefilteriterator.inc +++ b/ext/spl/internal/recursivefilteriterator.inc @@ -15,18 +15,25 @@ * @version 1.0 * @since PHP 6.0 * - * This extended FilterIterator allows a recursive iteration using - * RecursiveIteratorIterator that only shows those elements which - * are accepted. It is of course better to filter before doing the - * recursion since it allows to prevent recursion into children that - * get declined later anyway. + * 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 RecursiveFilterIterator extends FilterIterator implements RecursiveIterator +abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator { /** @param $it the RecursiveIterator to filter */ function __construct(RecursiveIterator $it) { + $this->ref = new ReflectionClass($this); parent::__construct($it); } @@ -34,15 +41,17 @@ class RecursiveFilterIterator extends FilterIterator implements RecursiveIterato */ function hasChildren() { - return $this->it->hasChildren(); + return $this->getInnerIterator()->hasChildren(); } /** @return the ParentIterator for the current elements children */ function getChildren() { - return new RecursiveFilterIterator($this->it->getChildren()); + return $this->ref->newInstance($this->getInnerIterator()->getChildren()); } + + private $ref; } ?>
\ No newline at end of file diff --git a/ext/spl/spl.php b/ext/spl/spl.php index 307cec0c2d..ba2f5dcc4a 100755 --- a/ext/spl/spl.php +++ b/ext/spl/spl.php @@ -495,6 +495,7 @@ interface Serializeable /** @ingroup SPL * @brief An Array wrapper * @since PHP 5.0 + * @version 1.1 * * This array wrapper allows to recursively iterate over Arrays and public * Object properties. @@ -507,8 +508,28 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Countable * That is any Array or Object. * * @param $array the array to use. + * @param $flags see setFlags(). */ - function __construct($array); + function __construct($array, $flags = 0); + + /** Set behavior flags. + * + * @param $flags bitmask as follows: + * 0 set: properties of the object have their normal functionality + * when accessed as list (var_dump, foreach, etc.) + * 1 set: array indices can be accessed as properties in read/write + */ + function setFlags($flags); + + /** + * @ return current flags + */ + function getFlags(); + + /** + * @param $array new array or object + */ + function exchangeArray($array); /** @return the iterator which is an ArrayIterator object connected to * this object. @@ -555,6 +576,7 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Countable /** @ingroup SPL * @brief An Array iterator * @since PHP 5.0 + * @version 1.1 * * This iterator allows to unset and modify values and keys while iterating * over Arrays and Objects. @@ -570,8 +592,23 @@ class ArrayIterator implements SeekableIterator, ArrayAccess, Countable * That is any Array or Object. * * @param $array the array to use. + * @param $flags see setFlags(). + */ + function __construct($array, $flags = 0); + + /** Set behavior flags. + * + * @param $flags bitmask as follows: + * 0 set: properties of the object have their normal functionality + * when accessed as list (var_dump, foreach, etc.) + * 1 set: array indices can be accessed as properties in read/write + */ + function setFlags($flags); + + /** + * @ return current flags */ - public function __construct($array); + function getFlags(); /** @param $index offset to inspect * @return whetehr offset $index esists |
