From: Marcus Boerger Date: Fri, 2 Sep 2005 19:15:30 +0000 (+0000) Subject: - Update docu X-Git-Tag: PRE_NEW_OCI8_EXTENSION~16 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=03136fc95dcb945c98c87d408c99d61c2021f441;p=php - Update docu --- 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 @@ -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