我正在編寫一個通用組件,它包裝了一個生成器并進行常規操作:按鍵過濾改變價值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 關注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消