我想创建一个目录类,我想让它作为迭代器(foreach-able)运行。 但我希望它是基于生成器的(例如一个“屈服”的函数)。 有可能吗?
答案 0 :(得分:4)
没有明确的类接口来实现生成器,但是你可以在这里使用IteratorAggregate
。
IteratorAggregate
的示例
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";
}
答案 1 :(得分:0)
生成器是迭代器。
来自http://www.php.net/manual/en/language.generators.object.php
第一次调用生成器函数时,将返回内部Generator类的对象。该对象实现Iterator接口的方式与只转发迭代器对象的方式非常相似。