1--TEST-- 2ReflectionGenerator while being currently executed 3--FILE-- 4<?php 5 6function call(ReflectionGenerator $ref, $method, $rec = true) { 7 if ($rec) { 8 call($ref, $method, false); 9 return; 10 } 11 var_dump($ref->$method()); 12} 13 14function doCalls(ReflectionGenerator $ref) { 15 call($ref, "getTrace"); 16 call($ref, "getExecutingLine"); 17 call($ref, "getExecutingFile"); 18 call($ref, "getExecutingGenerator"); 19 call($ref, "getFunction"); 20 call($ref, "getThis"); 21} 22 23($gen = (function() use (&$gen) { 24 $ref = new ReflectionGenerator($gen); 25 26 doCalls($ref); 27 28 yield from (function() use ($ref) { 29 doCalls($ref); 30 yield; // Generator ! 31 })(); 32})())->next(); 33 34?> 35--EXPECTF-- 36array(1) { 37 [0]=> 38 array(2) { 39 ["function"]=> 40 string(%d) "{closure:%s:%d}" 41 ["args"]=> 42 array(0) { 43 } 44 } 45} 46int(%d) 47string(%d) "%sReflectionGenerator_in_Generator.%s" 48object(Generator)#%d (1) { 49 ["function"]=> 50 string(%d) "{closure:%s:%d}" 51} 52object(ReflectionFunction)#4 (1) { 53 ["name"]=> 54 string(%d) "{closure:%s:%d}" 55} 56NULL 57array(2) { 58 [0]=> 59 array(4) { 60 ["file"]=> 61 string(%d) "%s" 62 ["line"]=> 63 int(%d) 64 ["function"]=> 65 string(%d) "{closure:%s:%d}" 66 ["args"]=> 67 array(0) { 68 } 69 } 70 [1]=> 71 array(2) { 72 ["function"]=> 73 string(%d) "{closure:%s:%d}" 74 ["args"]=> 75 array(0) { 76 } 77 } 78} 79int(%d) 80string(%d) "%sReflectionGenerator_in_Generator.%s" 81object(Generator)#%d (1) { 82 ["function"]=> 83 string(%d) "{closure:%s:%d}" 84} 85object(ReflectionFunction)#6 (1) { 86 ["name"]=> 87 string(%d) "{closure:%s:%d}" 88} 89NULL 90