mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
- Update docu
This commit is contained in:
parent
3ed0413de5
commit
03136fc95d
3 changed files with 56 additions and 68 deletions
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue