Skip to content

Instantly share code, notes, and snippets.

@gplanchat
Forked from paales/coroutine.php
Last active June 26, 2018 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gplanchat/96d3f9a73b3815ffb0ef5e1dfb388c06 to your computer and use it in GitHub Desktop.
Save gplanchat/96d3f9a73b3815ffb0ef5e1dfb388c06 to your computer and use it in GitHub Desktop.
<?php
class DataTransformer
{
public function transform(): \Generator
{
while ($request = yield) {
yield $request . ' - appended';
}
}
}
class DataRequester
{
/** @var DataTransformer */
private $dataTransformer;
public function __construct(DataTransformer $dataTransformer)
{
$this->dataTransformer = $dataTransformer;
}
public function execute(iterable $batches): iterable
{
$coroutine = $this->dataTransformer->transform();
foreach ($batches as $batch) {
while ($result = $coroutine->send($batch)) {
yield $result . "\n";
}
}
}
}
$requester = new DataRequester(
new DataTransformer()
);
$it = new \AppendIterator();
$it->append(new \ArrayIterator(['a','b','c']));
$it->append(new \ArrayIterator(['d','e','f']));
$it->append(new \ArrayIterator(['g','h','i']));
foreach ($requester->execute($it) as $value) {
echo $value . PHP_EOL;
}
/*
Results in:
a - appended
b - appended
c - appended
d - appended
e - appended
f - appended
g - appended
h - appended
i - appended
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment