note 119275 added to language.generators.overview
| From: | montoriuszatgmaildotcom | Date: | Sun, 01 May 2016 11:55:57 +0000 |
| Subject: | note 119275 added to language.generators.overview | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-205411@lists.php.net to get a copy of this message | ||
Bear in mind that execution of a generator function is postponed until iteration over its result
(the Generator object) begins. This might confuse one if the result of a generator is assigned to a
variable instead of immediate iteration.
<?php
$some_state = 'initial';
function gen() {
global $some_state;
echo "gen() execution start\n";
$some_state = "changed";
yield 1;
yield 2;
}
function peek_state() {
global $some_state;
echo "\$some_state = $some_state\n";
}
echo "calling gen()...\n";
$result = gen();
echo "gen() was called\n";
peek_state();
echo "iterating...\n";
foreach ($result as $val) {
echo "iteration: $val\n";
peek_state();
}
?>
If you need to perform some action when the function is called and before the result is used,
you'll have to wrap your generator in another function.
<?php
/**
* @return Generator
*/
function some_generator() {
global $some_state;
$some_state = "changed";
return gen();
}
?>
----
Server IP: 72.52.91.14
Probable Submitter: 77.114.92.28
----
Manual Page -- http://php.net/manual/en/language.generators.overview.php
Edit -- https://master.php.net/note/edit/119275
Del: integrated -- https://master.php.net/note/delete/119275/integrated
Del: useless -- https://master.php.net/note/delete/119275/useless
Del: bad code -- https://master.php.net/note/delete/119275/bad+code
Del: spam -- https://master.php.net/note/delete/119275/spam
Del: non-english -- https://master.php.net/note/delete/119275/non-english
Del: in docs -- https://master.php.net/note/delete/119275/in+docs
Del: other reasons-- https://master.php.net/note/delete/119275
Reject -- https://master.php.net/note/reject/119275
Search -- https://master.php.net/manage/user-notes.php