ホームページ >バックエンド開発 >PHPチュートリアル >PHPジェネレーターオブジェクト

PHPジェネレーターオブジェクト

伊谢尔伦
伊谢尔伦オリジナル
2016-11-23 09:06:441630ブラウズ

ジェネレータ関数が初めて呼び出されるとき、内部 Generator クラスのオブジェクトが返されます。このオブジェクトは、フロント イテレータ オブジェクトとほぼ同じ方法で Iterator インターフェイスを実装します。

Generator クラスのメソッドのほとんどは Iterator インターフェイスのメソッドと同じセマンティクスを持ちますが、ジェネレーター オブジェクトには追加のメソッド send() があります。

注意Generator オブジェクトは new を通じてインスタンス化できません

例 #1ジェネレータークラス

<?php
    class Generator implements Iterator {
        public function rewind(); //Rewinds the iterator. 如果迭代已经开始,会抛出一个异常。
        public function valid(); // 如果迭代关闭返回false,否则返回true.
        public function current(); // Returns the yielded value.
        public function key(); // Returns the yielded key.
        public function next(); // Resumes execution of the generator.
        public function send($value); // 发送给定值到生成器,作为yield表达式的结果并继续执行生成器.
    }
?>

Generator::send()

Generator::send()を使用すると、反復時にジェネレーターメソッドに値を注入できます。注入された値はyieldステートメントから返され、その後任意のジェネレーターメソッドで使用されます。

例 #2 Generator::send() を使用して値を挿入する

<?php
    function printer() {
        while (true) {
            $string = yield;
            echo $string;
        }
    }
    $printer = printer();
    $printer->send(&#39;Hello world!&#39;);
?>

上記のルーチンは次のように出力します:

Hello world!
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP SPL の使用次の記事:PHP SPL の使用