重写类中的生成器方法

jam*_*ima 3 php overriding generator

我在类中有一个方法可以产生几个值。调用时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";
};
Run Code Online (Sandbox Code Playgroud)

use*_*918 6

只需调用即可parent::generator_function()为您提供一个生成器,而您无需对其进行任何操作。在一个生成器中,您可以通过 委托给另一个生成器yield from

在 PHP 7 中,生成器委托允许您使用Yield from关键字从另一个生成器、Traversable 对象或数组生成值。然后,外部生成器将从内部生成器、对象或数组生成所有值,直到它们不再有效,之后将在外部生成器中继续执行。

例如:

class Child extends Papa
{
    public function generator_function()
    {
        yield from parent::generator_function();
        yield 4;
    }

}
Run Code Online (Sandbox Code Playgroud)