我正在编写一个通用组件,它包装了一个生成器并进行常规操作:
- 按键过滤
- 转换价值
- 等等
为了尽可能接近地模拟包装的生成器,如果生成器正在使用引用,我想使用引用。
当我尝试使用方法迭代非参考生成器foreach ($generator as $key => &$value)
时,我收到以下错误:
如果它声明它产生按引用,则只能迭代一个生成器按引用
有没有办法找出手头的生成器是否正在返回引用?我没有成功使用反射:
$reflectedGeneratorValueSupplier = new \ReflectionMethod($generator, 'current');
$this->canReference = $reflectedGeneratorValueSupplier->returnsReference(); //always false
此外,不使用构造的迭代生成器foreach
根本不适用于引用:
while ($generator->valid()) {
$key = $generator->key();
$value =& $generator->current(); //error, only variables can be passed by reference
$generator->next();
}