Skip to content

Instantly share code, notes, and snippets.

@dbalabka
Last active July 31, 2017 15:00
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 dbalabka/7e2c65544d7bc7eb1dd96dbb5e0dfd57 to your computer and use it in GitHub Desktop.
Save dbalabka/7e2c65544d7bc7eb1dd96dbb5e0dfd57 to your computer and use it in GitHub Desktop.
Inteteresting PHP generators behavior
<?php
class TestGenerator {
public function task1($doGenerate = true)
{
echo "Enter generator\n";
if ($doGenerate) {
echo "Generate values\n";
yield 1;
yield 2;
yield 3;
yield 4;
}
echo "Finally return\n";
return 5;
}
public function task2($doGenerate)
{
echo "Delegate generator with return\n";
return $this->task1($doGenerate);
}
public function task3($doGenerate)
{
echo "Delegate generator\n";
$return = yield from $this->task2($doGenerate);
echo "Where value $return ?\n";
return $return;
}
}
$obj = new TestGenerator();
echo "\nFirst test\n";
foreach ($obj->task3(true) as $val) {
echo "Generator return value: $val\n";
}
echo "\nSecond test\n";
foreach ($obj->task3(false) as $val) {
echo "Generator return value: $val\n";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment