- Update docu

This commit is contained in:
Marcus Boerger 2005-09-02 19:15:30 +00:00
parent 3ed0413de5
commit 03136fc95d
3 changed files with 56 additions and 68 deletions

View file

@ -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;
}
?>

View file

@ -15,18 +15,25 @@
* @version 1.0 * @version 1.0
* @since PHP 6.0 * @since PHP 6.0
* *
* This extended FilterIterator allows a recursive iteration using * Passes the RecursiveIterator interface to the inner Iterator and provides
* RecursiveIteratorIterator that only shows those elements which * the same functionality as FilterIterator. This allows you to skip parents
* are accepted. It is of course better to filter before doing the * and all their childs before loading them all. You need to care about
* recursion since it allows to prevent recursion into children that * function getChildren() because it may not always suit your needs. The
* get declined later anyway. * 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 /** @param $it the RecursiveIterator to filter
*/ */
function __construct(RecursiveIterator $it) function __construct(RecursiveIterator $it)
{ {
$this->ref = new ReflectionClass($this);
parent::__construct($it); parent::__construct($it);
} }
@ -34,15 +41,17 @@ class RecursiveFilterIterator extends FilterIterator implements RecursiveIterato
*/ */
function hasChildren() function hasChildren()
{ {
return $this->it->hasChildren(); return $this->getInnerIterator()->hasChildren();
} }
/** @return the ParentIterator for the current elements children /** @return the ParentIterator for the current elements children
*/ */
function getChildren() function getChildren()
{ {
return new RecursiveFilterIterator($this->it->getChildren()); return $this->ref->newInstance($this->getInnerIterator()->getChildren());
} }
private $ref;
} }
?> ?>

View file

@ -495,6 +495,7 @@ interface Serializeable
/** @ingroup SPL /** @ingroup SPL
* @brief An Array wrapper * @brief An Array wrapper
* @since PHP 5.0 * @since PHP 5.0
* @version 1.1
* *
* This array wrapper allows to recursively iterate over Arrays and public * This array wrapper allows to recursively iterate over Arrays and public
* Object properties. * Object properties.
@ -507,8 +508,28 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Countable
* That is any Array or Object. * That is any Array or Object.
* *
* @param $array the array to use. * @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 /** @return the iterator which is an ArrayIterator object connected to
* this object. * this object.
@ -555,6 +576,7 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Countable
/** @ingroup SPL /** @ingroup SPL
* @brief An Array iterator * @brief An Array iterator
* @since PHP 5.0 * @since PHP 5.0
* @version 1.1
* *
* This iterator allows to unset and modify values and keys while iterating * This iterator allows to unset and modify values and keys while iterating
* over Arrays and Objects. * over Arrays and Objects.
@ -570,8 +592,23 @@ class ArrayIterator implements SeekableIterator, ArrayAccess, Countable
* That is any Array or Object. * That is any Array or Object.
* *
* @param $array the array to use. * @param $array the array to use.
* @param $flags see setFlags().
*/ */
public 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 $index offset to inspect /** @param $index offset to inspect
* @return whetehr offset $index esists * @return whetehr offset $index esists