ディレクトリ クラスを作成し、それをイテレータ (foreach-able) として機能させたいと考えています。しかし、私はそれをジェネレーターベースにしたいです(たとえば、「利回り」を行う関数)。出来ますか?
2 に答える
4
クラスがジェネレーターを実装するための明示的なインターフェースはありませんが、IteratorAggregate
ここで利用できます。
Generators RFCIteratorAggregate
から実装するこの例を参照してください
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 に答える