SPL-StandardPHPLibrary
Public Member Functions | Private Attributes | List of all members
IteratorIterator Class Reference
Inheritance diagram for IteratorIterator:
Inheritance graph
Collaboration diagram for IteratorIterator:
Collaboration graph

Public Member Functions

 __call ($func, $params)
 
 __construct (Traversable $iterator, $classname=null)
 
 current ()
 
 getInnerIterator ()
 
 key ()
 
 next ()
 
 rewind ()
 
 valid ()
 

Private Attributes

 $iterator
 

Detailed Description

Basic Iterator wrapper.

Since
PHP 5.1

This iterator wrapper allows to convert anything that is traversable into an Iterator. It is very important to understand that most classes that do not implement Iterator have their reasone to. Most likely they do not allow the full Iterator feature set. If so you need to provide techniques to prevent missuse. If you do not you must expect exceptions or fatal errors.

It is also possible to derive the class and implement IteratorAggregate by downcasting the instances returned in getIterator. See the following example (assuming BaseClass implements Traversable):

class SomeClass extends BaseClass implements IteratorAggregate
{
function getIterator()
{
return new IteratorIterator($this, 'BaseClass');
}
}

As you can see in the example this approach requires that the class to downcast to is actually a base class of the specified iterator to wrap. Omitting the downcast in the above example would result in an endless loop since IteratorIterator::__construct() would call SomeClass::getIterator().

Definition at line 40 of file iteratoriterator.inc.

Constructor & Destructor Documentation

IteratorIterator::__construct ( Traversable  $iterator,
  $classname = null 
)

Construct an IteratorIterator from an Iterator or an IteratorAggregate.

Parameters
iteratorinner iterator
classnameoptional class the iterator has to be downcasted to

Definition at line 47 of file iteratoriterator.inc.

References $iterator.

48  {
49  if ($iterator instanceof IteratorAggregate)
50  {
51  $iterator = $iterator->getIterator();
52  }
53  if ($iterator instanceof Iterator)
54  {
55  $this->iterator = $iterator;
56  }
57  else
58  {
59  throw new Exception("Classes that only implement Traversable can be wrapped only after converting class IteratorIterator into c code");
60  }
61  }
Interface to create an external Iterator.
Definition: spl.php:533
$iterator
The inner iterator must be private because when this class will be converted to c code it won't no lo...
Basic iterator.
Definition: spl.php:549
Basic Exception class.
Definition: spl.php:258

Member Function Documentation

IteratorIterator::__call (   $func,
  $params 
)

Aggregate the inner iterator.

Parameters
funcName of method to invoke
paramsArray of parameters to pass to method

Definition at line 110 of file iteratoriterator.inc.

111  {
112  return call_user_func_array(array($this->iterator, $func), $params);
113  }
IteratorIterator::current ( )
Returns
current value

Implements Iterator.

Definition at line 86 of file iteratoriterator.inc.

87  {
88  return $this->iterator->current();
89  }
IteratorIterator::getInnerIterator ( )
Returns
the inner iterator as passed to the constructor

Implements OuterIterator.

Definition at line 65 of file iteratoriterator.inc.

References $iterator.

Referenced by InfiniteIterator\next().

66  {
67  return $this->iterator;
68  }
$iterator
The inner iterator must be private because when this class will be converted to c code it won't no lo...
IteratorIterator::key ( )
Returns
current key

Implements Iterator.

Definition at line 79 of file iteratoriterator.inc.

80  {
81  return $this->iterator->key();
82  }
IteratorIterator::next ( )

forward to next element

Implements Iterator.

Definition at line 93 of file iteratoriterator.inc.

94  {
95  return $this->iterator->next();
96  }
IteratorIterator::rewind ( )

rewind to the first element

Implements Iterator.

Definition at line 100 of file iteratoriterator.inc.

101  {
102  return $this->iterator->rewind();
103  }
IteratorIterator::valid ( )
Returns
whether the iterator is valid

Implements Iterator.

Definition at line 72 of file iteratoriterator.inc.

Referenced by InfiniteIterator\next().

73  {
74  return $this->iterator->valid();
75  }

Member Data Documentation

IteratorIterator::$iterator
private

The inner iterator must be private because when this class will be converted to c code it won't no longer be available.

Definition at line 118 of file iteratoriterator.inc.

Referenced by __construct(), and getInnerIterator().


The documentation for this class was generated from the following file: