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

伊谢尔伦
リリース: 2016-11-23 09:06:44
オリジナル
1595 人が閲覧しました

ジェネレータ関数が初めて呼び出されるとき、内部 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!
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート