参考不起作用的生成器

时间:2015-10-14 15:04:52

标签: php reference generator yield

给出以下代码

public static function &generate($arr)
{
    foreach ($arr as $key => $value) {
        yield $key => $value;
    }
}

这种静态方法应该产生$ key =>每个数组迭代的ref值为$

然后我在另一个类中使用静态方法:

$questions = $request->questions;

foreach (self::generate($questions) as &$question) {
    $question['label'] = json_encode($question['label']);

    ... other code
}

unset($question);

die(var_dump($questions[0]['label']));

我应该有一个json编码的字符串,但我总是有一个数组,我不明白为什么。

  • $ request var中的questions属性不存在,它由魔术方法__get返回(questions在数组内部,因此__get返回值)
  • 如果我删除了generate方法并将$questions提供给我的foreach,它可以工作,我有我的json编码字符串

1 个答案:

答案 0 :(得分:1)

您需要确保“一直通过”

的传递
public static function &generate(&$arr)
{
    foreach ($arr as $key => &$value) {
        yield $key => $value;
    }
}

适用于$arr$value