note 123972 added to generator.send

From: Date: Fri, 21 Jun 2019 10:38:01 +0000
Subject: note 123972 added to generator.send
Groups: php.notes 
Request: Send a blank email to php-notes+get-211326@lists.php.net to get a copy of this message
As of 7.3, the behavior of a generator in a foreach loop depends on whether or not it expects to receive data. Relevant if you are experiencing "skips". <?php class X implements IteratorAggregate { public function getIterator(){ yield from [1,2,3,4,5]; } public function getGenerator(){ foreach ($this as $j => $each){ echo "getGenerator(): yielding: {$j} => {$each}\n"; $val = (yield $j => $each); yield; // ignore foreach's next() echo "getGenerator(): received: {$j} => {$val}\n"; } } } $x = new X; foreach ($x as $i => $val){ echo "getIterator(): {$i} => {$val}\n"; } echo "\n"; $gen = $x->getGenerator(); foreach ($gen as $j => $val){ echo "getGenerator(): sending: {$j} => {$val}\n"; $gen->send($val); } ?> getIterator(): 0 => 1 getIterator(): 1 => 2 getIterator(): 2 => 3 getIterator(): 3 => 4 getIterator(): 4 => 5 getGenerator(): yielding: 0 => 1 getGenerator(): sending: 0 => 1 getGenerator(): received: 0 => 1 getGenerator(): yielding: 1 => 2 getGenerator(): sending: 1 => 2 getGenerator(): received: 1 => 2 getGenerator(): yielding: 2 => 3 getGenerator(): sending: 2 => 3 getGenerator(): received: 2 => 3 getGenerator(): yielding: 3 => 4 getGenerator(): sending: 3 => 4 getGenerator(): received: 3 => 4 getGenerator(): yielding: 4 => 5 getGenerator(): sending: 4 => 5 getGenerator(): received: 4 => 5 ---- Server IP: 208.43.231.9 Probable Submitter: 82.199.157.34 (proxied: 73.41.41.12) ---- Manual Page -- http://php.net/manual/en/generator.send.php Edit -- https://master.php.net/note/edit/123972 Del: integrated -- https://master.php.net/note/delete/123972/integrated Del: useless -- https://master.php.net/note/delete/123972/useless Del: bad code -- https://master.php.net/note/delete/123972/bad+code Del: spam -- https://master.php.net/note/delete/123972/spam Del: non-english -- https://master.php.net/note/delete/123972/non-english Del: in docs -- https://master.php.net/note/delete/123972/in+docs Del: other reasons-- https://master.php.net/note/delete/123972 Reject -- https://master.php.net/note/reject/123972 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#211326) next »