我正在编写一个通用组件,它包装了一个生成器并进行常规操作:
按键过滤
改变价值
ETC。
为了尽可能接近地模拟包装的生成器,如果生成器正在使用引用,我想使用引用。
当我尝试使用方法迭代非引用生成器时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();
}
一只斗牛犬