为了账号安全,请及时绑定邮箱和手机立即绑定

如何确定生成器是否产生引用?

如何确定生成器是否产生引用?

PHP
动漫人物 2023-10-21 17:16:13
我正在编写一个通用组件,它包装了一个生成器并进行常规操作:按键过滤改变价值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


查看完整回答
反对 回复 2023-10-21
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信