我有一个函数y()
这应该会产生一些记录。
然而,该函数在回调中获取记录,并将其传递给另一个函数d()
访问数据。d()
不返回或产生任何东西。
如果其他功能,这种模式是否可能d()
接受回调被认为是黑匣子?
替代设计是什么?
function y() {
d( function ($records) { // May be called multiple times
// How to yield for "y()"?
foreach ($records as $record)
yield $record;
} );
}
Writing yield
将匿名回调函数变成生成器函数。您需要调用此生成器函数来接收生成器,然后迭代该生成器。但是由于d
正在调用匿名函数,它是最终以生成器结束的函数,而不是调用者y
。所以这个用处不大,实际上是行不通的。
看来你能做的最好的事情就是:
function y() {
$results = [];
d(function ($val) use (&$results) {
$results[] = $val;
});
return $results;
}
foreach (y() as $val) {
echo $val, PHP_EOL;
}
这当然取决于d
在某个时刻返回。如果在内部它使用无限循环,这不会有任何好处。在这种情况下,您需要继续从回调中调用更多回调,这是典型的事件侦听器模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)