3

ディレクトリ クラスを作成し、それをイテレータ (foreach-able) として機能させたいと考えています。しかし、私はそれをジェネレーターベースにしたいです(たとえば、「利回り」を行う関数)。出来ますか?

4

2 に答える 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 に答える