- var_dump: documentation ( source)
- strtoupper: documentation ( source)
<?php
function debugPrintFilter()
{
return function(\Traversable $input) {
foreach ($input as $in) {
var_dump($in);
yield $in;
}
};
}
function fooFilter()
{
return function(\Traversable $input) {
foreach ($input as $in) {
yield "foo";
}
};
}
function upperCaseStringFilter()
{
return function(\Traversable $input) {
foreach ($input as $in) {
yield strtoupper($in);
}
};
}
class Pipeline implements \IteratorAggregate {
protected $filters = [];
protected $src;
function __construct()
{
}
function src(\Traversable $it)
{
$this->src = $it;
return $this;
}
function pipe(callable $filter)
{
$this->filters[] = $filter;
return $this;
}
function getIterator()
{
$it = $this->src;
foreach ($this->filters as $filter) {
$it = $filter($it);
}
return $it;
}
function run()
{
foreach($this as $it) {}
return $this;
}
}
$p = (new Pipeline)
->src(new \ArrayIterator(["foo", "bar", "baz"]))
->pipe(upperCaseStringFilter())
->pipe(debugPrintFilter())
->pipe(fooFilter())
->pipe(debugPrintFilter())
->run();