我在一个类中有一个产生两个值的方法。调用parent::generator_function()
时不会产生值。他们如何屈服
class Papa
{
public function generator_function()
{
yield 1;
yield 2;
yield 3;
}
}
class Child extends Papa
{
public function generator_function()
{
parent::generator_function();
yield 4;
}
}
$child = new Child();
foreach ($child->generator_function() as $value) {
echo "$value\n";
};
答案 0 :(得分:2)
简单地调用parent::generator_function()
会为您提供一个生成器,而您却无所作为。在生成器中,您可以delegate to another generator via yield from
。
在PHP 7中,生成器委托允许您使用 yield from 关键字从另一个生成器,Traversable对象或数组生成值。然后,外部生成器将从内部生成器,对象或数组中产生所有值,直到该值不再有效为止,然后在外部生成器中继续执行。
例如:
class Child extends Papa
{
public function generator_function()
{
yield from parent::generator_function();
yield 4;
}
}
答案 1 :(得分:1)
问题在于您正在父类中调用生成器,但这会向调用方产生值-这是派生类中的方法。因此,您需要通过产生返回值将这些值传递给调用方法,例如...
class Child extends Parent1
{
public function generator_function()
{
foreach ( parent::generator_function() as $out ) {
yield $out;
}
// parent::generator_function();
yield 4;
}
}