3

我想创建一个目录类,并希望它用作迭代器(foreach-able)。但我希望它是基于生成器的(例如一个执行“yield”的函数)。是否可以?

4

2 回答 2

4

类没有明确的接口来实现生成器,但您可以在IteratorAggregate此处使用。

IteratorAggregate请参阅从生成器 RFC实现的这个示例

class Test implements IteratorAggregate {
    protected $data;

    public function __construct(array $data) {
        $this->data = $data;
    }

    public function getIterator() {
        foreach ($this->data as $key => $value) {
            yield $key => $value;
        }
        // or whatever other traversation logic the class has
    }
}

$test = new Test(['foo' => 'bar', 'bar' => 'foo']);
foreach ($test as $k => $v) {
    echo $k, ' => ', $v, "\n";
}
于 2013-02-23T15:46:33.620 回答
0

生成器迭代器。

来自http://www.php.net/manual/en/language.generators.object.php

当第一次调用生成器函数时,会返回一个内部生成器类的对象。该对象以与只进迭代器对象相同的方式实现 Iterator 接口。

于 2013-02-23T15:50:42.947 回答