2017 © Pedro Peláez
 

library traversable-iterator

Turn Traversable objects into Iterators. Fixed version of the native IteratorIterator

image

wmde/traversable-iterator

Turn Traversable objects into Iterators. Fixed version of the native IteratorIterator

  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

Traversable Iterator

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Download count, (*1)

Iterator that can be constructed from Traversable objects., (*2)

Can be seen as a fixed version of IteratorIterator (which is used internally). IteratorIterator behaves in unexpected ways when constructed from an IteratorAggregate: it only calls getIterator once rather than once per iteration, which is what happens when you traverse the IteratorAggregate directly. In other words: looping over an IteratorIterator that contains a IteratorAggregate yields different behaviour than looping over the IteratorAggregate itself. This is unexpected and can be problematic. For instance when the IteratorAggregate contains a Generator (which happens often), looping over the IteratorIterator more than once will cause an error due to the Generator not being rewindable., (*3)

Example of how IteratorIterator fails:, (*4)

$iteratorAggregate = new class() implements \IteratorAggregate {
    public function getIterator() {
        yield 'a';
        yield 'b';
        yield 'c';
    }
}

$iterator = new IteratorIterator( $iteratorAggregate );

foreach ( $iterator as $value ) {}
foreach ( $iterator as $value ) {} // Exception: Cannot rewind a generator that was already run

This exception, and more generally difference in behaviour, does not occur when using TraversableIterator., (*5)

Installation

To add this package as a local, per-project dependency to your project, simply add a dependency on wmde/traversable-iterator to your project's composer.json file. Here is a minimal example of a composer.json file that just defines a dependency on Traversable Iterator 1.x:, (*6)

{
    "require": {
        "wmde/traversable-iterator": "~1.0"
    }
}

Usage

Running the tests

For a full CI run, (*7)

composer ci

For tests only, (*8)

composer test

For style checks only, (*9)

composer cs

Release notes

1.0.0 (2017-06-17)

  • Initial release

The Versions

03/02 2018

dev-master

9999999-dev https://github.com/wmde/traversable-iterator

Turn Traversable objects into Iterators. Fixed version of the native IteratorIterator

  Sources   Download

GPL-2.0+ GPL-2.0-or-later

The Requires

  • php >=7.0

 

The Development Requires

17/06 2017

1.0.0

1.0.0.0 https://github.com/wmde/traversable-iterator

Turn Traversable objects into Iterators. Fixed version of the native IteratorIterator

  Sources   Download

GPL-2.0+

The Requires

  • php >=7.0

 

The Development Requires