我正在编写一个通用组件,它包装了一个生成器并进行常规操作:按键过滤改变价值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();}
1 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
使用ReflectionGenerator然后使用getFunction似乎可行。
<?php
function &generate(&$arr)
{
foreach ($arr as $key => &$value) {
yield $key => $value;
}
};
$input = range(0,100);
$generator = generate($input);
$r = new ReflectionGenerator ($generator);
var_dump($r->getFunction()->returnsReference()); // true
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消