php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #71252 Yield from by reference is not supported
Submitted: 2015-12-30 23:24 UTC Modified: 2021-09-22 12:07 UTC
Votes:2
Avg. Score:3.5 ± 0.5
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: nikic@php.net Assigned:
Status: Open Package: Scripting Engine problem
PHP Version: 7.0Git-2015-12-30 (Git) OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: nikic@php.net
New email:
PHP Version: OS:

 

 [2015-12-30 23:24 UTC] nikic@php.net
Description:
------------
When "yield from" was implemented, we did not consider how it interacts with yield-by-reference. Right now it is simply ignored and "yield from" yields all values by-value.

Likely this is not the expected or intended behavior. Instead "yield from" in a by-reference generator should yield array values and values from by-reference generators by-reference. "yield from" should generate an error for iterators (and generators) that do not support by-reference iteration.

Test script:
---------------
<?php
function &gen(array $array) {
    yield from $array;
}

$array = [1, 2, 3];
foreach (gen($array) as &$v) {
    $v += 1;
}
var_dump($array);

Expected result:
----------------
array(3) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(4)
}


Actual result:
--------------
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-09-22 12:07 UTC] cmb@php.net
-Summary: yield from ignores yield-by-reference +Summary: Yield from by reference is not supported -Type: Bug +Type: Documentation Problem
 [2021-09-22 12:07 UTC] cmb@php.net
As of PHP 7.0.4 this is forbidden[1].  When looking at the
respective commit message[2] and the now long standing behavior,
it might be best to just document the behavior.

[1] <https://3v4l.org/fZEH0>
[2] <https://github.com/php/php-src/commit/ccc06e252bdf4c54cb2c96dbcab9a2aeb933181c>
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 17:01:58 2024 UTC